2012-11-20 32 views
0

更新:找到我認爲是modelState.isValid爲false的原因。 該模型有7個屬性...和debbuging我發現模型只接收6個屬性從視圖。ModelState.IsValid無效。爲什麼我可以創建用戶?

我的複選框沒有發送到控制器?我應該怎麼做才能做到這一點?

這是視圖:

@using (Ajax.BeginForm("Register", "Account", new AjaxOptions { HttpMethod = "POST", OnSuccess = "closeDialog('RegistroUsuario', '<b>Usuário cadastrado com Sucesso!</b>', true)" }, new { id = "FormRegistroUsuario" })) 
{ 
    <fieldset> 
     <legend>Cadastro novo Usuário</legend> 
     <table id="changePassword"> 
       <tr> 
        <td class="smallField">Username:</td> 
        <td>@Html.TextBoxFor(m => m.UserName,new { @class = "validate[required]" }) @Html.ValidationMessage("usernameVal", "*")</td> 
       </tr> 
       <tr> 
        <td>Password:</td> 
        <td>@Html.PasswordFor(m => m.Password, new { @class = "validate[required]" }) @Html.ValidationMessage("passwordVal", "*")</td> 
       </tr> 
       <tr> 
        <td>Repetir Senha:</td> 
        <td>@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "validate[required,equals[Password]]" }) @Html.ValidationMessage("senhaVal", "*")</td> 
       </tr> 
       <tr> 
        <td>Email:</td> 
        <td>@Html.TextBoxFor(m => m.Email, new { @class = "validate[required,custom[email]]" }) @Html.ValidationMessage("emailVal", "*")</td> 
       </tr> 
       <tr> 
        <td>Pergunta Secreta:</td> 
        <td>@Html.TextBoxFor(m => m.SecretQuestion, new { @class = "validate[required]" }) @Html.ValidationMessage("secretVal", "*")</td> 
       </tr> 
           <tr> 
        <td>Resposta:</td> 
        <td>@Html.TextBoxFor(m => m.SecretQuestionPassword, new { @class = "validate[required]" }) @Html.ValidationMessage("awnserVal", "*")</td> 
       </tr> 
       <tr> 
        <td>Ativo:</td> 
        <td><input type="checkbox" name="status" id="status" value="Ativo" data-val="true"/> @Html.ValidationMessage("activeVal", "*")</td> 
       </tr>  
      </table> 
     <input type="submit" value="Criar Usuário" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only button-link"/>   
    </fieldset> 

} 

感謝...


這是一個很奇怪的行爲
我仍然得到用戶因爲某些原因產生。

由於已經存在用戶名,有些時候用戶沒有被創建。 (即使用戶不存在)..很奇怪

if (ModelState.IsValid) 
     { 

      MembershipProvider mp = Membership.Provider; 
      MembershipCreateStatus Status; 
      string erroMsg; 

      if (String.IsNullOrEmpty(Request.Form["status"])) 
      { 
       model.Active = false; 
      } 
      else 
      { 
       model.Active = true; 
      } 

      MembershipUser newUser = mp.CreateUser(model.UserName, model.Password, model.Email, model.SecretQuestion, model.SecretQuestionPassword, model.Active, Guid.NewGuid(), out Status); 

      try 
      { 

       if (newUser == null) 
       { 
        erroMsg = GetErrorMessage(Status); 
        return Content(erroMsg); 
       } 
       else 
       { 
        return Content("Usuário Cadastrado"); 
       } 

      } 
      catch (MembershipCreateUserException e) 
      { 
       throw e; 
      } 
      catch (Exception e) 
      { 
       throw new MembershipCreateUserException("An exception occurred creating the user.", e); 
      } 
     } 
     else 
     { 
      return Content("isValid is false!"); 
     } 
+0

很難告訴控制器代碼,您是否使用自定義MembershipProvider? – JOBG

+0

這是我的供應商:<成員defaultProvider = 「AspNetSqlProvider」 userIsOnlineTimeWindow = 「15」> <添加名稱= 「AspNetSqlProvider」 類型= 「System.Web.Security.SqlMembershipProvider」 的connectionStringName = 「tgpwebgedString」 的applicationName =」 /」 enablePasswordRetrieval = 「假」 enablePasswordReset設置= 「真」 requiresQuestionAndAnswer = 「真」 requiresUniqueEmail = 「真」 了passwordFormat = 「散列」 maxInvalidPasswordAttempts = 「3」 minRequiredPasswordLength = 「7」/>

回答

0

我終於找到了這個awnser。 模型真的不一致。輸入複選框未被髮送到模型,從而導致model.isValid爲false。

我使用helper html複選框解決了問題。

<td>@Html.CheckBoxFor(m => m.Active)</td> 

所有我必須做的是讓複選框應有的價值

bool checkvalue = bool.Parse(Request.Form.GetValues("Active")[0]); 

非常感謝!

相關問題