我有一个强类型的视图,但是有一个表单可以发布到不同的模型。当用户将注释留空但我无法弄明白时,我需要发回验证错误。以下是视图中的表单:
@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);
}
答案 0 :(得分:0)
有几种方法可以实现这一目标。 这就是我要做的事情:
查看:强>
@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"]
是否为空并检查值。如果它不为空且为真,那么该注释为空。
在我看来,你不应该只做客户端或服务器端。如果您要进行验证,则应该使用客户端和服务器。
答案 1 :(得分:-1)
您始终可以使用客户端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 中忘记要显示错误的每个字段