1

我正在使用 ASP.NET MVC 4。

我认为我的 ModelState 没有正确传递,

控制器操作:Home/EnrolResult如下:

[HttpPost]
public ActionResult EnrolResult(UploadModel model)
{
    if (ModelState.IsValid)
    {
        // my codes in here
        return View();
    }
    return View("~/Views/Home/Index", model);
}

查看:Home/Index,如下:

@using (Html.BeginForm("EnrolResult", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    @Html.ValidationSummary()

    @Html.LabelFor(m => m.Firstname)
    @Html.TextBoxFor(m => m.Firstname)

    @Html.LabelFor(m => m.Surname)
    @Html.TextBoxFor(m => m.Surname)

    <li data-role="fieldcontain">
        <input type="submit" value="Enrol" />
    </li>
}

当我正确输入详细信息时,它会正常运行并显示 enrolresult 视图。

当我错误地输入详细信息时,它会返回 Home/Index,但不会显示未输入哪个表单的验证错误。

模型设置正确,因为我已经对其进行了测试,其中我将 EnrolResult 操作更改为索引操作并且正确显示了验证错误,其中我使用了 view(model) 意味着不必像我尝试的那样传递 ModelState在这种情况下要做。

我这样做的方式正确吗?我见过人们使用 TempData 但我认为这种方法是可行的?

4

1 回答 1

3

缺少验证消息助手:

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    @Html.ValidationSummary()

    @Html.LabelFor(m => m.Firstname)
    @Html.TextBoxFor(m => m.Firstname)
    @Html.ValidationMessageFor(m => m.Firstname)

    @Html.LabelFor(m => m.Surname)
    @Html.TextBoxFor(m => m.Surname)
    @Html.ValidationMessageFor(m => m.Surname)

    <li data-role="fieldcontain">
        <input type="submit" value="Enrol" />
    </li>
}

编辑:

如果您不想使用ValidationMessageFor我相信您需要使用不同的 Html.ValidationSummary( false ) 重载。如果我没记错的话,ValidationSummary 的默认行为会隐藏属性级错误以避免重复。

于 2013-05-06T06:31:55.977 回答