对于我的生活,我不明白为什么这个简单的代码不起作用。我知道这里有很多这样的问题,我已经试过了所有的问题,但我就是不能让它起作用!
我的控制器:
//validate email
if (studentlist.StudentLiveId == null || !studentlist.StudentLiveId.Contains("@"))
{
ModelState.AddModelError("StudentLiveId", "Please enter a valid email id");
return View(studentlist);
}我的观点-相关的bit:
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<p style="font-weight: bold; font-size: large; color: red">
hELLO
</p>
<div class="editor-field">
@Html.ValidationMessageFor(model => model.StudentLiveId)
</div>错误:
如果我将liveid字段保留为null,而不是显示错误和停止,它只是跳过liveid验证字段,转到模型中的其他下拉字段,并抛出一个对象引用,而不是设置为对象错误的实例!
我只是在另一个常见的地方打印验证错误,而不是在相关字段旁边。我希望视图会抛出错误并停止进一步加载,而不是转到下拉列表并显示一些随机错误。这里怎么了?
发布于 2014-03-28 05:31:03
不管是否存在ModelState错误,模型都会被处理并绑定到视图,因此不幸的是,您的期望是不正确的。
如果获得空引用错误,通常意味着要将某种类型的集合重新绑定到DropDownList或其他没有防范空集合的助手。
您必须记住,当您发布表单时,没有绑定到某种类型的输入的任何内容都不会被保留。有时,这似乎有违直觉,但绑定到下拉列表的值是“选中”值,而不是用于填充<select>元素的项的集合。因此,如果您的初始操作包括构建IEnumerable、List或SelectList (等等)的逻辑。对于模型,在返回视图之前,必须在post操作中重复该逻辑。
https://stackoverflow.com/questions/22593899
复制相似问题