我不知道如何使用 DropDownList 进行序列化,并收到错误“无法序列化类型'System.Web.Mvc.SelectList'。”我正在以向导形式使用序列化将用户输入保留到最后,然后发布确认。
我在 View 中使用以下内容:
@using (Html.BeginFormAntiForgeryPost())
{
@Html.Hidden("myData", new MvcSerializer().Serialize(Model, SerializationMode.Signed))
...
@Html.DropDownListFor(m => m.RealEstate, Model.RealEstateList)
...
}
在我的 ViewModel (MyData) 中,我有:
[Serializable]
public class myData
{
public int RealEstate { get; set; }
public IEnumerable<SelectListItem> RealEstateList { get; set; }
...
public MyData()
{
var realestatelist = new List<SelectListItem>() {
new SelectListItem { Text = "(Please select)" },
new SelectListItem { Value = "1", Text="Some text." },
new SelectListItem { Value = "2", Text="Some other text." }
};
this.RealEstateList = new SelectList(realestatelist, "Value", "Text");
}
}
非常感谢任何帮助。
最佳答案
SelectList 不支持序列化。尝试使用IEnumerable<SelectedListItem>
, IList<SelectListItem>
或List<SelectedListItem>
在您的 Controller 中,然后在 View 中创建 SelectList。
更改与此类似的 Controller :
public MyData()
{
var realestatelist = new List<SelectListItem>() {
new SelectListItem { Text = "(Please select)" },
new SelectListItem { Value = "1", Text="Some text." },
new SelectListItem { Value = "2", Text="Some other text." }
};
this.RealEstateList = realestatelist;
}
}
看到你的RealEstateList
模型中已经是IEnumerable<SelectListItem>
您可以在 View 中创建 SelectList,然后指定值和文本,而无需转换模型属性,如下所示:
@Html.DropDownListFor(m => m.RealEstate, new SelectList(Model.RealEstateList, "Value", "Text"))
关于asp.net-mvc-3 - MVC 3 下拉列表: Cannot figure out 'System.Web.Mvc.SelectList' cannot be serialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9214918/