Пользовательский класс для извлечения данных из formcollection в обратной передаче в ASP.net MVC - PullRequest
0 голосов
/ 11 марта 2011

Меня интересует возможность создания объекта строгого типа из коллекции форм для извлечения данных из него.

Другими словами, возможно ли создать класс в зависимости от ключей в объекте formcollection?

Например: Скажем, у вас есть флажок с ключом «ID3» и значением «false». И уметь писать:

bool CheckBox = FormObj.ID3.GetValue();

Я понимаю, что, возможно, это не самая полезная вещь в мире, но все же интересно.

Полагаю, дело в языковом ограничении.

Есть мысли по этому поводу?

Edit:

Хорошо, поэтому, если у меня есть список (неизвестной длины) и я поставил foreach в своем представлении и получил флажки, как бы я связал их в моем контроллере?

    <% foreach (var item in Model.AllAttributes)
   { %>
<tr>
    <td>
        <%: Html.CheckBox(item.AttributeID.ToString(), item.Chosen) %>
    </td>
    <td>
        <%: item.AttributeTitle %>
    </td>
    <td>
        <%: item.Category.CategoryName %>
    </td>
</tr>
<% } %>

Что мне вставить в мой контроллер?

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Относительно вашего редактирования:.

У вас должен быть следующий класс:

Attribute
{
    bool AttributeID;
    string AttributeTitle;
    cat Category;

}

и в вашей модели (например, ужин). у вас будет

IEnumerable<Attribute> AllAttributes;

и затем в контроллере вы можете получить к нему доступ:

[HttpPost]
        public ActionResult Create(Dinner dinner)
        {
            if (ModelState.IsValid)
            {
                 bool id = dinner.AllAttributes[0].AttributeID;
0 голосов
/ 11 марта 2011

Да, это делается ModelBinder, и класс DefaultModelBinder работает с большинством типов .NET Framework, включая массивы и объекты IList, ICollection и IDictionary, но при необходимости вы можете создать свой собственный ModelBinder.Проверьте этот пост MSDN для получения более подробной информации.

Ваше действие контроллера будет примерно таким

        [HttpPost]
        public ActionResult Create(Dinner dinner)
        {
            if (ModelState.IsValid)
            {
                int id = dinner.ID;
                ...
                ...
...