我正在把头发拉出来。
我正在尝试实现一个多步骤向导,我在MVC3期货中使用Html.Serialize
html助手。这很有效,除了我模型中的一个属性是SelectList
。我不希望这个属性序列化(并且当它尝试时它会爆炸)。
我无法使用[NonSerialized]
,因为它仅适用于字段,而不适用于属性。我甚至尝试了一些其他正常的方法,例如[XmlIgnore]
(我认为它不会起作用)。
使用Html.Serialize
时,是否有人可以建议忽略模型中属性的属性?
编辑:
我尝试序列化时得到的错误是InvalidDataContractException。有这样的信息:
类型'System.Web.Mvc.SelectList'无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记。有关其他受支持的类型,请参阅Microsoft .NET Framework文档。
但是,如果我这样做,那么我必须用[DataMember]
标记所有成员只是为了排除1个属性,这似乎有点愚蠢。
更新:
这个代码的一个简单示例(确保添加对System.Runtime.Serialization.dll的引用):
test.cs中
[Serializable]
public class Test
{
public int ID { get; set; }
[IgnoreDataMember]
public SelectList TestList { get; set; }
}
HomeController.cs
public ActionResult About()
{
return View(new Test() { ID = 0, TestList = new SelectList(new [] {""})});
}
主页/ About.cshtml
@using Microsoft.Web.Mvc
@model MvcApplication3.Models.Test
@Html.Serialize("Test", Model)
这会生成InvalidDataContractException
答案 0 :(得分:4)
public class MyViewModel
{
[IgnoreDataMember]
public SelectList Items { get; set; }
...
}
或简单地说:
public class MyViewModel
{
public IEnumerable<SelectListItem> Items { get; set; }
...
}