![](/img/trans.png)
[英]Backbone.js model.isValid() method not returning false for an invalid model
[英]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.