mvc3 – ajax表单提交和服务器端验证
我确信已经提出过这个问题,但我一直在尝试给出所有解决方案,但是没有一个给定的解决方案能够解决我的问题.可能,我没有正确实施.
我正在使用MVC3,razor,jQuery. 我有一个新的用户注册表单.注册成功后,我想在对话框中显示成功的消息(注册类型不同). 如果ModelState有任何错误,意味着ModelState.IsValid == false,我想在ValidationSummary中显示错误. 视图 function OnBegin () { alert('begin'); return $('form').validate().form(); } function OnSuccess () { alert('success'); DisplaySucess()} function OnFailure () { alert('failure'); } function DisplaySuccess() { var typeOfRegistration = $('input:radio[name=RegistrationType]:checked').val(); var msg; if (typeOfRegistration == 0) { msg = "You are successfully enrolled for Algebra classes."; } if (typeOfRegistration == 1) { msg = "You are registered with your email address. Someone would contact you with an email."; } if (typeOfRegistration == 2) { msg = "Thank you for filling up this form. One welcome packet would be delivered with in next 15 days"; } msg = msg.replace(/n/g,'<br />'); $('#dialog').html(msg); $('#dialog').dialog('open'); } @model Models.RegistrationModel @using (Ajax.BeginForm("NewRegistration","Account",new AjaxOptions() { OnBegin="OnBegin",OnSuccess = "OnSuccess",OnFailure = "OnFailure" })) { @Html.ValidationSummary() <div> Register<br /> @Html.RadioButton("RegistrationType ","0",true) New Algebra class<br /> @Html.RadioButton("RegistrationType ","1") New user registration by email<br /> @Html.RadioButton("RegistrationType ","2") New user registration by mailing address<br/> ..some more types </div> <div> …here I display/hide controls based on Registration type selected. <div> @Html.LabelFor("UserName") @Html.TextBox("UserName")</div> } 调节器 public ActionResult NewRegistration(RegistrationModel model) { if (Request.IsAjaxRequest()) { if (!ModelState.IsValid) { //Ques: How do I display this in ValidationSummary. return Json(new object[] { false,"Contains Email Address",ModelState.GetAllErrors() }); } else { if (UserNameIsTaken){ //Ques: This does not show in ValidationSummary ModelState.AddModelError("_FORM","This username is already taken. Please pick a different username."); } } } else if (!ModelState.IsValid) { return View(model); } } 模型 public class RegistrationModel: IValidatableObject { [Required] //this gets displayed in ValidationSummary as Client-side validation public string UserName { get; set; } .. and all fields here } public IEnumerable<ValidationResult> Validate(ValidationContext context) { if (!string.IsNullOrEmpty(UserName) && UserName.Contains(EmailAddress)) { yield return new ValidationResult("Username cannot contain email address",new[] { "UserName" }); } } Web.config有
包含的.js文件
我在这里错过了什么?还有其他选择 解决方法
我认为发布一个表单víaajax你只会得到客户端错误.
服务器端错误,需要通过Json返回,然后在标记víajQuery或普通javascript中“插入”. Here you can see and download a fully working example. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |