3

我正在把头发拉出来。

我正在尝试实现一个多步骤向导,并且我Html.Serialize在 MVC3 Futures 中使用了 html 助手。这很好用,除了我的模型中的一个属性是SelectList. 我不希望这个属性序列化(无论如何尝试时它都会爆炸)。

我不能使用[NonSerialized],因为它只适用于字段,而不是属性。我什至尝试了其他一些正常的方法,例如[XmlIgnore](我认为无论如何都行不通)。

任何人都可以建议一个在使用时会忽略模型中属性的属性Html.Serialize吗?

编辑:

我尝试序列化时遇到的错误是 InvalidDataContractException。有这样的消息:

无法序列化类型“System.Web.Mvc.SelectList”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果该类型是一个集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。

但是,如果我这样做,那么我必须将所有成员标记为[DataMember]仅排除 1 个属性,这似乎有点愚蠢。

更新:

一个简单的例子是这段代码(确保添加对 System.Runtime.Serialization.dll 的引用):

测试.cs

[Serializable]
public class Test
{
    public int ID { get; set; }
    [IgnoreDataMember]
    public SelectList TestList { get; set; }
}

家庭控制器.cs

public ActionResult About()
{
    return View(new Test() { ID = 0, TestList = new SelectList(new [] {""})});
}

主页/关于.cshtml

@using Microsoft.Web.Mvc
@model MvcApplication3.Models.Test 

@Html.Serialize("Test", Model)

这会生成 InvalidDataContractException

4

1 回答 1

4
public class MyViewModel
{
    [IgnoreDataMember]
    public SelectList Items { get; set; }

    ...
}

或者简单地说:

public class MyViewModel
{
    public IEnumerable<SelectListItem> Items { get; set; }

    ...
}
于 2012-02-14T23:09:34.893 回答