验证会触发,但不会显示失败消息。我错过了什么? MVC 5 Razor

时间:2016-04-12 01:41:08

标签: javascript asp.net-mvc razor asp.net-mvc-5

我似乎无法在View上的输入模型字段下显示验证错误消息。

Description输入上方的[Required]标签使ModelState无效,但不会停止提交。我必须通过检查模型状态来捕获它。我错过了一些.js文件吗?我没有任何例子可以对此进行双重检查。

这是我的模型(注意我现在只有一个[必需]):

public partial class Requests
{
    public int RequestID { get; set; }
    public string NickName { get; set; }
    public Nullable<double> Lat { get; set; }
    public Nullable<double> Lng { get; set; }
    public string ZipCode { get; set; }
    [Required(ErrorMessage = "Description of what you need is missing.")]
    public string Description { get; set; }
    public System.DateTime DateCreated { get; set; }
}

这是我的视图,其中描述输入需要输入。

<div class="form-group">
    @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.TextAreaFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @rows = "20", @cols = "200" } })
        @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
    </div>
</div>

这是我的控制器ActionResult(skinnied down)

if (ModelState.IsValid)
{
 //THIS ALL WORKS IF Description HAS INPUT

}
else
{
  TempData["Saved"] = "Nothing saved yet. Look for reason.";
return RedirectToAction("StoreRequests", new { lat = requests.Lat, lng = requests.Lng });
}

ModelState失败时,用户会被定向到正确的视图,TempData显示没有保存任何内容。但是,在违规输入下面的视图上没有错误消息,视图顶部没有ValidationSummary,并且输入错误时提交没有停止。

@if(TempData["Saved"] != null)
{
    <span style="color: red;">@TempData["Saved"].ToString()</span>
}
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })

2 个答案:

答案 0 :(得分:1)

为了获得客户端验证(因此如果表单无效,则阻止表单被提交),您需要在视图(或布局)中包含以下脚本。

jquery-{version}.js
jquery.validate.js
jquer.validate.unobtrusive.js

如果在创建新项目时有VS设置的默认包,则只需将以下内容添加到视图中

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")

此外,如果ModelState无效,则不应重定向,而是返回当前视图,即使用户已禁用javascript,也会显示任何验证错误。通过重定向,您的丢失电流ModelState,因此在您重定向到的视图中不会显示验证错误,更不用说用户先前填充的任何数据(除了您传递的2个参数)将丢失。

public ActionResult Edit (Requests model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }
    // save you data and redirect
}

答案 1 :(得分:0)

scripts文件中直接添加以下必要.cshtml

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>