ValidationMessageFor和AddmodelError不起作用

时间:2014-03-23 16:52:29

标签: jquery .net asp.net-mvc-3 validationmessage

对于我的生活,我无法弄清楚为什么这段简单的代码不起作用。我知道这里有很多这样的问题,我已经尝试了所有这些问题,但我无法让它发挥作用!

我的控制器:

 //validate email
            if (studentlist.StudentLiveId == null || !studentlist.StudentLiveId.Contains("@"))
            {
                ModelState.AddModelError("StudentLiveId", "Please enter a valid email id");
                return View(studentlist);
            }

我的观点 - 相关位:

@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,而不是显示错误和   停止,它只是跳过Live Id验证字段并转到   模型中的其他一些下拉字段并抛出一个Object引用   未设置为对象错误的实例!

我只是在另一个常见位置打印验证错误,而不是在相关字段旁边。我希望视图抛出错误并停止进一步加载,而不是去下拉列表并显示一些随机错误。这有什么不对?

1 个答案:

答案 0 :(得分:0)

无论是否存在任何ModelState错误,模型都会被处理并绑定到视图,因此您的期望很遗憾。

如果您收到空引用错误,通常意味着您尝试将某种类型的集合重新绑定到DropDownList或其他没有帮助的其他帮助程序防止空集合。

你必须记住,当你发布表格时,任何不受某种或那种输入约束的东西都不会被保留。这似乎有点违反直觉,但是下拉列表中绑定的值是&#34;选择&#34; value,而不是用于填充<select>元素的项集合。因此,如果您的初始操作包含为您的模型构建IEnumerableListSelectList(等)的逻辑,则必须在返回之前在帖子操作中重复该逻辑观点。