我有一个示例应用程序,试图学习jQuery验证并在此场景中提交表单。ASP.Net MVC 2 - jQuery验证和表单提交 - DataAnnotations
该页面有一个文本框(每个类信封的EnvelopeID)。如果点击提交按钮,文本框是空的,那么我想显示一条错误消息。如果它不是空的,那么我想发布一个Ajax请求到GetData操作。该操作返回部分视图(值1或2)或错误字符串。
问题:
- 客户端验证不在这里发生。
- 我如何使
$(form).submit
坚持jQuery验证,并且不会发布数据如果为空?我可以检查文本框是空的或不张贴(手动),但我想使用正确的方法。
这个相同的例子适用于MSAjax和验证没有任何问题。
母版页头
<script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery-1.4.1.min.js") %>"></script>
<script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.validate.min.js") %>"></script>
<script type="text/javascript" src="<%= Url.Content("~/Scripts/MicrosoftMvcJQueryValidation.js") %>"></script>
类:
namespace PartialViews.Models
{
public class Envelope
{
[Required(ErrorMessage="Envelope ID is required!")]
public string EnvelopeID { get; set; }
}
}
数据操作:
[HttpPost]
public ActionResult GetData(Envelope envelope)
{
ActionResult result = null;
if (ModelState.IsValid)
{
Information myInfo = newInformation();
if (envelope.EnvelopeID == "1")
{
result = View("TQ1PV", myInfo); //partial view
}
elseif (envelope.EnvelopeID == "2")
{
result = View("TQ2PV", myInfo); //partial view
}
else
{
result = Content("Error");
}
}
else
{
result = View("index", envelope);
}
return result;
}
指数操作:
public Action Result Index()
{
return View();
}
上查看JS - 指数
<script type="text/javascript">
$(function() {
//onload
$("#evid").focus();
$("form[name='EVIDForm']").submit(function() {
var action = $(this).attr('action');
var evid = $("#evid").val();
var tdata = $(this).serialize();
alert(tdata);
$message = $("#resultDiv");
$message.html('').removeClass("red");
$.ajax({
cache: false,
type: "post",
url: action,
data: tdata,
dataType: "html",
error: function (xhr, ajaxOptions, thrownError){
alert('system error');
},
success: function(data){
if (data == 'Error')
$message.html("No such EV ID found!").addClass("red");
else
$message.html(data);
}
});
return false;
});
});
</script>
上查看HTML - 指数:
<% Html.EnableClientValidation(); %>
<%= Html.ValidationSummary() %>
<% using (Html.BeginForm("GetData", "Info", FormMethod.Post, new {name = "EVIDForm" }))
{%>
<%= Html.LabelFor(model => model.EnvelopeID) %>
<%= Html.TextBoxFor(model => model.EnvelopeID, new { maxlength = "8"})%>
<%= Html.ValidationMessageFor(model => model.EnvelopeID,"*") %>
<br /><br />
Correct EVIDs are 1 and 2. All other entries will result in an error.
<br /><br />
<input type="submit" value="submit" />
<%} %>
<div id="resultDiv" style="margin-top: 20px;"></div>
感谢
我具有几乎相同的问题,因为在所描述的帖子@vandalo链接。看起来,客户端验证在未提交表单的情况下不起作用。但如果我必须提交表单验证不再是客户端....我没有收到我的问题在这里回答:'http://stackoverflow.com/questions/4172319/inline-client-side-validation -with-mvc-and-jquery /' – Lorenzo 2010-11-16 14:13:30
@Lorenzo:表单未提交。您可以尝试在接收帖子的控制器中设置断点。它永远不会触发。唯一的问题是(只有第一次,直到你不点击按钮)客户端验证似乎从一开始就没有触发。 – LeftyX 2010-11-16 14:40:23
@vandalo:如果你使用提琴手或萤火虫,你可以看到提交给服务器 – Lorenzo 2010-11-16 14:47:11