1

SelectListItemnullで投稿している理由がわかりません。これが私のシナリオです:

public class MyViewModel
{
   public int SelectedCategoryId {get;set;
   public IList<Category> Categories {get;set}
   public IList<SelectListItem> CategoriesSelectListItem
   {
      get
      {              
           var list = (from item in Categories 
                 select new SelectListItem()
                 {
                      Text = item.Name,
                      Value = item.Id.ToString()
                 }).ToList();
           return list;
       }
       set { }
    }
}


[HttpGet]
public ActionResult Index()
{
   IList<Category> categs = repository.GetCategories();
   return View(new MyViewModel(){ Categories = categs });
}

[HttpPost]
public ActionResult Index(MyViewModel model)  // At this point model.Categories is null on postback
{
   if(ModelState.IsValid())
   {
      // Do some Logic
      return Content("Succes!");
   }
   return View(model); //Throw again the view if model state is not valid
}

景色:

@model MyViewModel
@{
   Layout=null;
}
   @Html.DropDownListFor(x => x.SelectedCategoryId,Model.CategoriesSelectListItem)

では、Model.Categories WHITHOUT ViewData[""]またはSession変数にバインドし続ける方法は?

ありがとう!

更新 1

ビューを追加しました

4

1 に答える 1

0

フォームを投稿する場合、投稿する情報はinputフィールドの情報です。

DropDownListfor モデル プロパティがあるためSelectedCategoryId (フォーム ブロック内にあると思われます)、投稿される唯一のフィールドは選択された値です。

これは、HTTP と Asp.Net MVC3 での動作です。すべてのページがサーバーに移動する (投稿される) 通常の ASP.NET から来たので、混乱するかもしれません。

各リクエストで完全なドロップダウンリストがデータベースから取得される (またはデータベースへの複数回の移動を避けるためにキャッシュされる) ため、通常は選択された値のみが必要です。考えてみると、ユーザーが何を選択したか、つまり、ユーザーに表示したリストを知りたいと思うでしょう。

于 2013-10-29T18:26:21.757 に答える