回发时MVC列表空

时间:2014-01-22 17:57:35

标签: c# asp.net-mvc html.dropdownlistfor

我的控制器使用strings列表填充我的模型,该列表显示在我的视图中的DropDownList中。当视图回发到我的Controller时,该列表突然 null 。为什么它为null,我创建的字符串列表发生了什么?

列表已正确填充并显示在视图中。表格元素的其余部分正确地回发。例如, selectedName 具有用户点击的任何名称。唯一没有回复的是 nameList

这是我模型的相关部分,

public class MyModel
{
    [Display(Name = "Selected")]
    public string selectedName{ get; set; }
    [Display(Name = "Names")]
    public List<string> nameList{ get; set; }
}

我的控制器的相关Get和Post部分,

public class MyController: Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        List<string> nameList= getNames();
        MyModel model = new MyModel()
        model.nameList= nameList;
        // Now, model.nameList has a bunch of stuff in it
        return View(model); 
    }

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        if(model.nameList== null)
        {
            cry();
            postOnStackOverflow();
        }
        return View(model); 
    }
}

和我的View的相关部分(封装在表单中)。

<p>
    @Html.LabelFor(c => c.nameList):
@Html.DropDownListFor(c => c.selectedName, new SelectList(Model.nameList), new { onchange = "this.form.submit();" })
</p>

2 个答案:

答案 0 :(得分:2)

发布表单时,仅发布下拉列表的值。我假设您的控件在表单上。

我不确定您为什么要总是返回发布的视图,但是您需要重新填充列表:

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
         List<string> names = getNames();

        model.nameList = names;
        return View(model); 
    }

答案 1 :(得分:1)

考虑到您的观点,这是预期的行为。您需要重新加载namelist集合属性,只需将模型返回到同一视图即可。

[HttpPost]
public ActionResult Index(MyModel model)
{
   if(ModelState.IsValid)
   {
     // Save and redirect
   }
   //reload the collection again and return the model to the view
   model.nameList=getNames();
   return View(model); 
}