加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

mvc3 – ajax表单提交和服务器端验证

发布时间:2020-12-16 02:49:23 所属栏目:百科 来源:网络整理
导读:我确信已经提出过这个问题,但我一直在尝试给出所有解决方案,但是没有一个给定的解决方案能够解决我的问题.可能,我没有正确实施. 我正在使用MVC3,razor,jQuery. 我有一个新的用户注册表单.注册成功后,我想在对话框中显示成功的消息(注册类型不同). 如果ModelS
我确信已经提出过这个问题,但我一直在尝试给出所有解决方案,但是没有一个给定的解决方案能够解决我的问题.可能,我没有正确实施.

我正在使用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有

UnobtrusiveJavaScriptEnabled=”true” and ClientValidationEnabled=”true”

包含的.js文件

script src=”@Url.Content(“~/Scripts/jquery-1.7.1.min.js”)” type=”text/javascript”>

script src=”@Url.Content(“~/Scripts/jquery.validate.min.js”)” type=”text/javascript”>

script src=”@Url.Content(“~/Scripts/jquery.validate.unobtrusive.min.js”)” type=”text/javascript”>

script src=”@Url.Content(“~/Scripts/jquery.unobtrusive-ajax.min.js”)” type=”text/javascript”>

我在这里错过了什么?还有其他选择
提前致谢.

解决方法

我认为发布一个表单víaajax你只会得到客户端错误.

服务器端错误,需要通过Json返回,然后在标记víajQuery或普通javascript中“插入”.

Here you can see and download a fully working example.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读