簡體   English   中英

在我的MVC 4應用程序中,Model.Isvalid獲取失敗。 如何解決這個問題?

[英]Model.Isvalid getting failed in my MVC 4 application. How do fix this?

我有一個視圖,該視圖包含創建用戶和登錄表單。 對於我兩個都有不同的模型。 當用戶單擊注冊按鈕時,我將傳遞寄存器模型值,並在登錄時單擊我傳遞模型值登錄。我也在模型中添加了一些驗證(您可以在下面的代碼中看到它)。 由於我有兩個模型,因此我又添加了一個同時持有這兩個模型的模型(帳戶)。單擊注冊或登錄后,將這個模型(帳戶)從視圖傳遞給控制器​​。原因是模型始終無效,當用戶單擊“登錄”按鈕時,將傳遞具有“注冊”和“登錄”模型但僅包含登錄詳細信息的帳戶模型。由於用戶單擊“登錄”,因此注冊模型的所有值都將為空(僅存在登錄數據) 。 因此在控制器Model.Isvalid中始終為false,因為沒有用於寄存器模型的值。

那么,還有其他方法可以驗證特定模型嗎? 在這種情況下有什么解決方案?

 @model Selfie.Models.Account
   @using (Html.BeginForm())     
        { 

                   @Html.TextBoxFor( model => model.RegisterModel.FirstName,null, new {@class="form-control",id="fn", placeholder=" First Name",required="true",maxlength="20"})
                   @Html.ValidationMessageFor(model => model.RegisterModel.FirstName) 

                    @Html.TextBoxFor(model => model.RegisterModel.LastName,null, new { @class = "form-control",id="ln", placeholder=" Last Name",required="true",maxlength="20"})
                    @Html.ValidationMessageFor(model => model.RegisterModel.LastName)

                   <button type="submit" class="btn btn-success" id="btnsub">Create Account</button>        


        } 
//Login
@using (Html.BeginForm("Login", "Selfie", FormMethod.Post, new { }))
        {   


                    @Html.TextBoxFor(model => model.LoginModel.UserName,null, new { @class = "form-control",id="lem"})
                    @Html.ValidationMessageFor(model => model.LoginModel.UserName) 

                     @Html.TextBoxFor(model => model.LoginModel.Pwd,null, new { @class = "form-control"})
                     @Html.ValidationMessageFor(model => model.LoginModel.Pwd) 

                    <button type="submit" class="btn btn-success" id="btnlogin">Log In</button>

        }    

//控制器

[HttpPost]

    public ActionResult Register(Account registration)
    {
        if(Model.Isvalid)
          {
              string a= Account.fname; 

            }
    }

    [HttpPost]
    public ActionResult Login(Accountlogin)
    {

        if(Model.Isvalid)
          {
              string a= Account.username; 

            }
    }

模型

   [Required(ErrorMessage="Last name is required")]
    public string LastName {get; set;}
    [Required(ErrorMessage="First name is required")]
    public string FirstName { get; set; }

}

public class LoginModel
{
    [Required(ErrorMessage = "User name is required")]
    [Display(Name = "User name")]
    [RegularExpression("^([\\w\\.\\-]+)@([\\w\\-]+)((\\.(\\w){2,3})+)$", ErrorMessage = "Invalid email")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "Password is required")]
    public string Pwd { get; set; }
}
public class Account
    {
        public LoginModel LoginModel{get; set;}
        public RegistrationModel RegisterModel {get; set;}
    }

好吧,首先要提起斯蒂芬在評論中提到的內容,這兩者實際上不應以相同的形式存在。

但是 ,過去在僅驗證模型的部分方面遇到了相同的問題(在您的模型和實體實現相同接口的情況下,有時無法驗證所有內容)。

我通過執行以下操作解決了此問題,您僅驗證從表單傳入的字段。 因此,在執行操作時,您將執行以下操作:

var itemsToIgnore = ModelState.Keys
    .Where(c => !Request.Form.AllKeys.Contains(c))
    .ToList();

foreach (var item in itemsToIgnore)
{
    ModelState.Remove(item);
}

if (ModelState.IsValid)
{
    //all fields passed in were valid
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM