我的控制器使用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>
答案 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);
}