【问题标题】:@Html.ValidationSummary() does not work within Ajax.BeginForm@Html.ValidationSummary() 在 Ajax.BeginForm 中不起作用
【发布时间】:2012-11-08 01:35:50
【问题描述】:

Ajax.BeginForm 表单中使用@Html.ValidationSummary() 有什么问题吗?

我有以下情况,我无法验证必填字段。表单刚刚发布,也没有抛出任何错误。

这是视图:

@using (Ajax.BeginForm("Register", "Account", new AjaxOptions { HttpMethod = "POST", OnSuccess = "closeDialog('RegistroUsuario')" }))
{
   @Html.ValidationSummary() 
   <fieldset>
        <legend>Cadastro novo Usuário</legend>
       <table id="changePassword">
                <tr>
                    <td class="smallField">Username:</td>
                    <td>@Html.TextBoxFor(m => m.UserName)</td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td>@Html.PasswordFor(m => m.Password)</td>
                </tr>
                <tr>
                    <td>Repetir Senha:</td>
                    <td>@Html.PasswordFor(m => m.ConfirmPassword)</td>
                </tr>
                <tr>
                    <td>Email:</td>
                    <td>@Html.TextBoxFor(m => m.Email)</td>
                </tr>
                <tr>
                    <td>Pergunta Secreta:</td>
                    <td>@Html.TextBoxFor(m => m.SecretQuestion)</td>
                </tr>
                               <tr>
                    <td>Resposta:</td>
                    <td>@Html.TextBoxFor(m => m.SecretQuestionPassword)</td>
                </tr>
                <tr>
                    <td>Ativo:</td>
                    <td><input type="checkbox" name="status" id="status" value="Ativo"></td>
                </tr>    
            </table>           
    </fieldset>
    <input type="submit" value="Criar Usuário" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only button-link"/>
}

那是控制器:

//
    // POST: /Account/Register
    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            MembershipProvider mp  = Membership.Provider;
            MembershipCreateStatus Status;                

            // Tenta registrar o usuário
            try
            {
                //Verifica se usuário deve estar ativo ou não no sistema
                if (String.IsNullOrEmpty(Request.Form["status"]))
                {
                    model.Active = false;
                }
                else
                {
                    model.Active = true;
                }

                //Cria o usuário
                MembershipUser newUser = mp.CreateUser(model.UserName, model.Password, model.Email, model.SecretQuestion, model.SecretQuestionPassword, model.Active, Guid.NewGuid(), out Status);

                if (newUser == null)
                {   
                    /**/
                }
                else
                {                       
                    return RedirectToAction("Index", "Home");   
                }

            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

还有模特:

public class RegisterModel
{
    [Required]
    [Display(Name = "Usuário")]
    public string UserName { get; set; }

    [Required]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "A {0} deve ter no mínimo {2} caracteres.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Senha")]
    public string Password { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Repetir Senha")]
    [Compare("Password", ErrorMessage = "As senhas não coincidem")]
    public string ConfirmPassword { get; set; }

    [Required]
    [Display(Name = "Pergunta Secreta")]
    public string SecretQuestion { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "A {0} deve ter no mínimo {2} caracteres.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Senha Pergunta Secreta")]
    public string SecretQuestionPassword { get; set; }

    [Required]
    [Display(Name = "Ativo")]
    public bool Active { get; set; }
}

我错过了什么吗?

【问题讨论】:

  • 好吧,你的调试器告诉你什么?你能到达return View(model)吗?摘要看起来不错。

标签: asp.net-mvc-4 validationsummary ajax.beginform


【解决方案1】:

找到问题了。

未设置 Ajax.Options 目标 ID。一旦我设置了验证 dom 元素,我现在就会收到消息。

非常感谢

【讨论】:

  • 什么是“验证域”?当我使用您的示例时,我必须将 UpdateTargetId 设置为视图的根元素,您由 Controller 返回它,它将完全重新呈现它
  • @Philipp,这是一个老项目。那时我正在做那个项目,我对自己的工作没有专业知识,我找到了一个我不确定它是否是最好的解决方案。我会在晚上打开那个项目,我会带着遮阳篷回到你身边。
【解决方案2】:

具体说明 Guilherme Longo 答案

将 AjaxOptions 设置为

new AjaxOptions() { HttpMethod = "Post", OnSuccess = "RefreshMethod", UpdateTargetId = "FormId" }

注意 UpdateTargetId 设置为 formId。为我工作谢谢 Guilherme

【讨论】:

  • "UpdateTargetId" 可以设置为父表单,而不是表单。当它设置为表单时,它只是第一次工作。应该注意的是,父母不得有另一个孩子。否则,新代码将替换为表单。
猜你喜欢
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2012-03-07
  • 2021-12-03
相关资源
最近更新 更多