3

私はこれで髪を引っ張っています。

マルチステップ ウィザードを実装しようとしていますがHtml.Serialize、MVC3 Futures で html ヘルパーを使用しています。私のモデルのプロパティの 1 つが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 が生成されます

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 に答える