1

我不明白为什么我SelectListItem的帖子是空的。这是我的场景:

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 (我想它在 Form 块内),所以将发布的唯一字段是选定的值。

这就是 HTTP 和 Asp.Net MVC3 中的工作方式。可能您来自正常的 ASP.NET,所有页面都传输(发布)到服务器,您会感到困惑。

我们通常只需要选择的值,因为在每个请求中都会从数据库中检索完整的下拉列表(或缓存以避免多次访问数据库)。如果您考虑一下,您想知道用户选择了什么,您向他显示的列表您已经知道了。

于 2013-10-29T18:26:21.757 回答