我似乎无法在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" })
答案 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>