2012-02-09 121 views
1

DropDownListでシリアライズする方法を理解できず、エラーが発生しています "'System.Web.Mvc.SelectList' "ウィザード形式でシリアル化を使用して、最後までユーザー入力を保持してから確認を送信します。私はビューに次のように使用していますMVC 3 DropDownListFor: 'System.Web.Mvc.SelectList'がシリアル化されないことがわかりません

:私のViewModelに(のMyData)では

@using (Html.BeginFormAntiForgeryPost()) 
{ 
    @Html.Hidden("myData", new MvcSerializer().Serialize(Model, SerializationMode.Signed)) 
    ... 
    @Html.DropDownListFor(m => m.RealEstate, Model.RealEstateList) 
    ... 
} 

、私がしている:

[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"); 
    } 
} 

をすべてのヘルプは大歓迎です。

答えて

1

SelectListはシリアル化をサポートしていません。コントローラーにIEnumerable<SelectedListItem>,IList<SelectListItem>またはList<SelectedListItem>を使用し、ビューでSelectListを作成してみます。これに似た

変更コントローラ:

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を見て、あなたがこのようにモデルのプロパティを変換せずに値とテキストを指定するために、ビューでSelectListのを作ることができるIEnumerable<SelectListItem>すでに次のとおりです。エラーが言っているよう

@Html.DropDownListFor(m => m.RealEstate, new SelectList(Model.RealEstateList, "Value", "Text")) 
+0

私はあなたが投稿@htmlコードを使用して、まだ私は怒っ運転していたものですエラーを得ていた:あなたが好き、あなたのビュー内でごList<SelectListItem>バックSelectListに変換する必要があります

。単純な解決策は私のコード 'this.RealEstateList = newestList(realestatelist、" Value "、" Text ");を自分のものに変更することでした**' this.RealEstateList = realestatelist; ** ** THANKS !!! – REMESQ

0

SelectListクラスは、シリアライズすることはできません。 SelectListItemオブジェクトのセットをシリアル化する必要がある場合は、List<SelectListItem>のようにシリアル化できるコンテナを使用する必要があります。

関連する問題