1

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

我的控制器:

 //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 验证字段并转到模型中的其他一些下拉字段并抛出未设置为对象实例的对象引用错误!

我只是在另一个常见的地方打印验证错误,而不是在相关字段旁边。我希望视图会抛出错误并停止进一步加载,而不是转到下拉菜单并显示一些随机错误。这里有什么问题?

4

1 回答 1

0

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

如果你得到一个空引用错误,这通常意味着你正在尝试将某种集合重新绑定到一个DropDownList或其他一些没有防范空集合的助手。

您必须记住,当您发布表单时,不会保留任何未绑定到某种输入的内容。有时似乎违反直觉,但绑定到下拉列表的值是“选定”值,而不是用于填充<select>元素的项目集合。因此,如果您的初始操作包括为您的模型构建一个IEnumerable、、ListSelectList(等)的逻辑,则您必须在返回视图之前在您的发布操作中重复该逻辑。

于 2014-03-28T05:31:03.233 回答