Я вытаскиваю свои волосы на этом.
Я пытаюсь реализовать многошаговый мастер, и я использую помощник Html.Serialize
html в MVC3 Futures. Это хорошо работает, за исключением того, что одно из свойств в моей модели - SelectList
. Я не хочу, чтобы это свойство сериализовалось (и оно в любом случае взрывается).
Я не могу использовать [NonSerialized]
, потому что это работает только с полями, а не со свойствами. Я даже попробовал некоторые другие нормальные способы, такие как [XmlIgnore]
(который я не думал, что будет работать в любом случае).
Может кто-нибудь предложить атрибут, который будет игнорировать свойство в модели при использовании Html.Serialize
?
EDIT:
Ошибка, которую я получаю при попытке сериализации, - это исключение InvalidDataContractException. Есть это сообщение:
Тип 'System.Web.Mvc.SelectList' не может быть сериализован. Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute. Если тип является коллекцией, попробуйте пометить его с помощью CollectionDataContractAttribute. См. Документацию Microsoft .NET Framework для других поддерживаемых типов.
Однако, если я сделаю это, мне придется пометить всех членов [DataMember]
, чтобы исключить 1 свойство, что выглядит глупо.
UPDATE:
Краткий пример этого - фрагмент кода (обязательно добавьте ссылку на 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