在没有模型的情况下在 MVC 中引发验证错误
Posted
技术标签:
【中文标题】在没有模型的情况下在 MVC 中引发验证错误【英文标题】:Throwing a Validation Error in MVC without a Model 【发布时间】:2015-06-18 15:37:26 【问题描述】:我有一个对一个模型进行强类型化的视图,但上面有一个表单可以发布到另一个模型。当用户将注释留空但无法弄清楚时,我需要发回验证错误。这是视图中的表单:
@using (html.BeginForm())
@Html.AntiForgeryToken()
<div class="col-md-12 col-xs-12">
<div class="form-group">
@*@Html.HiddenFor(model => model.TicketId)*@
@Html.Label("New Note", new @class = "control-label" )
@Html.TextArea("Note", new cols = 600, @rows = 5 )
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Add" class="btn btn-default" />
</div>
</div>
</div>
这是我的控制器代码:
[HttpPost]
public ActionResult EditUserTicket(Guid id, string Note)
if (Note != "")
AddTicketNote(Guid.Parse(Session["LoggedUserID"] as string), id, Note, true);
return RedirectToAction("EditUserTicket", id);
【问题讨论】:
如果可能的话,我建议强烈键入它以完全避免这种情况。只需创建一个 NoteViewModel 并将它的实例添加到父级拥有的任何模型中。然后只需使用必需的属性和 ValidationMessageFor 即可获得简单的解决方案。 @br4d 这是我正在创建的帮助台软件。我没有这样做的原因是上面是附加到模型的票证表,该模型对视图进行了强类型化。然后在表格下方是附在这张票上的所有注释的列表。中间的这个表格是为了让用户可以在工单上添加一个新的注释。有没有办法我仍然可以使用视图模型来做到这一点? @djblois 我的回答有帮助吗? 是的,我想是的,杰米,我现在正在努力。 【参考方案1】:有几种方法可以实现这一点。 这就是我会做的:
查看:
@using (Html.BeginForm())
@Html.AntiForgeryToken()
<div class="col-md-12 col-xs-12">
<div class="form-group">
@*@Html.HiddenFor(model => model.TicketId)*@
@Html.Label("New Note", new @class = "control-label" )
@Html.TextArea("Note", new cols = 600, @rows = 5, id = "noteArea" )
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input id="submitBtn" type="submit" value="Add" class="btn btn-default" />
</div>
</div>
</div>
<script>
$(function()
$('#submitBtn').click(function (e)
if($('#noteArea').val() == "")
e.preventDefault();
alert("Please enter a note"); //You could append some HTML somewhere (I dont like alerts)
);
);
</script>
控制器:
[HttpPost]
public ActionResult EditUserTicket(Guid id, string Note)
if (Note != "")
AddTicketNote(Guid.Parse(Session["LoggedUserID"] as string), id, Note, true);
TempData["NoteError"] = true;
return RedirectToAction("EditUserTicket", id);
然后在您的EditUserTicket
ActionMethod 中检查TempData["NoteError"]
是否不为空并检查该值。如果它不为 null 且为 true,则该注释为空。
在我看来,您不应该只做客户端或服务器端。如果您要进行验证,您应该在客户端和服务器上进行。
【讨论】:
【参考方案2】:您始终可以使用客户端 jquery 进行 asp.net mvc 附带的验证。
确保在 BundleConfig.cs jquery.validate 中包含并调用布局中的包。
那么在你看来
$("#myForm").submit(function (e)
e.preventDefault();
var validator = $("#myForm").validate().form();
if (validator)
//do something you can alway send to server and do another validation
);
不要忘记在您的表单中 @Html.ValidationMessage 为您希望出现错误的每个字段
【讨论】:
如果他愿意,您不阅读我代码中的引用吗?他总是可以将 ajax 发送回服务器并进行另一次验证以上是关于在没有模型的情况下在 MVC 中引发验证错误的主要内容,如果未能解决你的问题,请参考以下文章
你可以在没有模型的情况下在 Django 中运行原始 MySQL 查询吗?
在没有 android studio 的情况下在本地运行 flutter web 应用程序会引发 firebase 错误