Параметры контроллера ASP.NET MVC создают объект автоматически - PullRequest
1 голос
/ 20 июня 2011

Если у меня есть такой объект:

public class StatisticsRequest
    {
        public string Level { get; set; }
        public string Analysis { get; set; }
        ...more properties
    }

Тогда я могу объявить контроллер MVC2 следующим образом?:

public ActionResult GetResponseStats(StatisticsRequest statsRequest)

и получить параметры моей строки запроса, автоматически проанализированные в моемпользовательский объект?

Это не работает для меня - вы можете это сделать?

Редактировать:

Это весь мой класс контроллера:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Tradeshow.Models;

namespace Tradeshow.Controllers
{
    [Authorize]
    public class DashboardController : Controller
    {
        public ActionResult GetResponseStats(StatisticsRequest statsRequest)// string profileid, string analysis, string question, string answer, string omitheaders)
        {
            Tradeshow.Models.Mongo mongo = new Models.Mongo();
            // For top-level requests that don't specify the analysis, use the previously requested top-level analysis 
            if (statsRequest.IsTopLevelRequest)
            {
                if (statsRequest.Analysis == null || statsRequest.Analysis.Length == 0)
                {
                    statsRequest.Analysis = (String)Session["statsanalysistype"];
                }
                else
                {
                    Session["statsanalysistype"] = statsRequest.Analysis;
                }
            }
            string clientdatabasename = (String)Session["clientdatabasename"];
            Dashboard dashboard = mongo.BuildResponseDashboard(clientdatabasename,statsRequest);
            return PartialView("ProfileDashboard",dashboard);
        }
    }
}

Это весь мой объект StatisticsRequest:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Tradeshow.Models
{
    /// <summary>
    /// Encapsulates the properties that make up a statistics request for generating one or more graphs and charts
    /// </summary>
    public class StatisticsRequest
    {
        public string Level { get; set; }
        public string Analysis { get; set; }
        public string ProfileId { get; set; }
        public string Question { get; set; }
        public string Answer { get; set; }
        public string TimespanFormat { get; set; }
        public string TimespanValue { get; set; }

        public bool OmitHeaders
        {
            get
            {
                bool rc = false;

                if (String.Compare(Level, "profile", true) == 0) rc = true;

                return rc;
            }
        }

        public bool IsTopLevelRequest
        {
            get
            {
                bool rc = false;

                if (String.Compare(Level, "profile", true) == 0) rc = true;

                return rc;
            }
        }
    }
}

И самая простая тестовая строка запроса (которая не работает) выглядит так:

/Dashboard/GetResponseStats?profileid=123&unique=775765

Много времени толькоодин или два параметра будут переданы в строку запроса.

Edit2

Еще один момент - объект StatisticsRequest является просто произвольным объектом и не имеет ничего общегос моделью просмотра.Я создал объект StatisticsRequest исключительно для инкапсуляции запроса, а не для поддержки представлений на основе форм и т. Д.

Ответы [ 3 ]

2 голосов
/ 20 июня 2011

Если вы наберете UpdateModel(statsRequest);, связыватель модели по умолчанию заполнит данные с использованием строки запроса и сформирует данные, если свойства совпадают по имени. Вы также можете вызвать TryUpdateModel(statsRequest);, который будет работать, только если все свойств могут быть обновлены.

0 голосов
/ 20 июня 2011

Ярость ботаников верна.Если бы вы увидели источник на его примере, вы бы получили что-то вроде этого.

<input type="text" name="StatisticsRequest.Level" />
0 голосов
/ 20 июня 2011

Предполагая, что вы используете примитивные типы, связыватель модели должен иметь возможность создавать объект этого типа из переданных значений. Имена параметров строки запроса должны соответствовать именам свойств. Если это из сообщения формы, убедитесь, что ваши входные данные названы правильно.

Самый простой способ сделать это - использовать помощников.

Html.TextboxFor(m => m.Level);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...