内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我有以下简单的ASP.NETMVC操作:
public ActionResult Edit(EditPostViewModel data) { }
EditPostViewModel
具有如下的验证属性:
[Display(Name = "...", Description = "...")] [StringLength(100, MinimumLength = 3, ErrorMessage = "...")] [Required()] public string Title { get; set; }
在我看来,我使用的是下列帮手:
@Html.LabelFor(Model => Model.EditPostViewModel.Title, true) @Html.TextBoxFor(Model => Model.EditPostViewModel.Title, new { @class = "tb1", @Style = "width:400px;" })
如果我对此文本框放在验证中的表单进行提交,将首先在客户端上完成,然后在服务上完成(ModelState.IsValid
)
现在我有几个问题:
$.ajax
ModelState.IsValid
工作?@Html.ValidationSummary(true)
)Ajax调用示例:
function SendPost(actionPath) { $.ajax({ url: actionPath, type: 'POST', dataType: 'json', data: { Text: $('#EditPostViewModel_Text').val(), Title: $('#EditPostViewModel_Title').val() }, success: function (data) { alert('success'); }, error: function () { alert('error'); } }); }
包括在网页上:
<script src="/Scripts/jquery-1.7.1.min.js"></script> <script src="/Scripts/jquery.validate.min.js"></script> <script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>
你应该做的是序列化你的表单数据,并将其发送到控制器操作。ASP.NET MVC将EditPostViewModel
使用MVC模型绑定功能将表单数据绑定到对象。
你可以在客户端验证您的表单,如果一切正常,则将数据发送到服务器。该valid()
方法将派上用场。
$(function () {
$("#yourSubmitButtonID").click(function (e) {
e.preventDefault();
var _this = $(this);
var _form = _this.closest("form");
var isvalid = _form .valid(); // Tells whether the form is valid
if (isvalid)
{
$.post(_form.attr("action"), _form.serialize(), function (data) {
//check the result and do whatever you want
})
}
});
});