2013-08-05 3 views
0

У меня есть класс с именем "AirLineSession":@ Html.HiddenFor() не передает данные на контроллер

public ExtendedList listCo { get; set; } 
    public ExtendedList listBa { get; set; } 

    public bool SortbyRating { get; set; } 
    public AirLineSession() 
    { 
     listCo = new ExtendedList(); 
     listBa = new ExtendedList(); 
    } 

На мой взгляд, у меня есть:

@Html.HiddenFor(m => m.listBa) 
@Html.HiddenFor(m => m.listCo) 
@Html.DropDownListFor(a => a.SortbyRating, new[] { new SelectListItem { Text = "Sort by rating", Value = "true" }, new SelectListItem { Text = "Sort by frice", Value = "false" } }) 

Когда я на вершине этого представления, только данные SortByRating передаются модели в Controller, listBa и listCo не передаются. Я не знаю почему.
Кто-нибудь мне помогает, спасибо.

+0

Не могли бы вы выслать код класса ExtendedList? Причина в том, что asp.net mvc не знает, как создать все Hiddens для сложного типа «ExtendedList». В этом случае вы должны добавить hiddens для каждого поля объекта и коллекции. –

+0

Пробовал ли вы использовать FormCollection в качестве второго аргумента и попробовать проверить этот аргумент для ключей и значений ??? –

+1

Html.HiddenFor может «хранить» только базовые типы по умолчанию (т. Е. Строка, целое число, десятичное число, перечисление и т. Д.). Он не может содержать сложные классы, и из его взглядов ExtendedList у вас есть класс. – Jakub

ответ

0

Не могли бы вы выслать код класса ExtendedList? Причина в том, что asp.net mvc не знает, как создать все Hiddens для сложного типа ExtendedList. В этом случае, вы должны добавить hiddens для каждого поля объекта и коллекции для обеих коллекций, для образца:

@for(var i = 0; i < Model.listCo.Lenght; i++) 
{ 
    @Html.HiddenFor(model => model.listCo[i].Property1) 
    @Html.HiddenFor(model => model.listCo[i].Property2) 
    @Html.HiddenFor(model => model.listCo[i].Property3) 
} 

А также:

@for(var i = 0; i < Model.listBa.Lenght; i++) 
{ 
    @Html.HiddenFor(model => model.listBa[i].Property1) 
    @Html.HiddenFor(model => model.listBa[i].Property2) 
    @Html.HiddenFor(model => model.listBa[i].Property3) 
} 
0

Если вы используете для несимметричных HTML хелперов, убедитесь, вы передали свои значения по модели в соответствующий вид. Но если нет, вы должны поместить значения в некоторые динамические инструменты, такие как ViewBag, а затем использовать следующий код:

@Html.Hidden("listBa", ViewBag.listba) 
@Html.Hidden("listCo", ViewBag.listco)