gpt4 book ai didi

javascript - Model.Isvalid 在我的 MVC 4 应用程序中失败。如何解决这个问题?

转载 作者:行者123 更新时间:2023-11-30 16:56:32 25 4
gpt4 key购买 nike

我有一个 View ,该 View 包含创建用户和登录表单。对于两者,我都有不同的模型。当用户单击“注册”按钮时,我将传递注册模型值,对于登录,单击我传递登录模型值。我还在模型中添加了一些验证(您可以在下面看到我的代码)。因为我有两个模型,所以我又添加了一个模型(帐户),它同时包含这两个模型。在单击注册或登录时,我将这个模型(帐户)从 View 传递到 Controller 。模型一直无效的原因是,当用户单击登录按钮时,正在传递具有注册和登录模型但仅具有登录详细信息的帐户模型。注册模型的所有值都将为空,因为用户单击登录(只有登录数据会在那里)。因此在 Controller Model.Is valid 中始终为 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>

}

// Controller

[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;}
}

最佳答案

好吧,首先,正如 Stephen 在评论中提到的,这两者不应该存在于同一个表单中。

但是,我在过去遇到过关于仅验证模型的一部分的相同问题(在您的模型和实体实现相同接口(interface)的情况下,有时可能不切实际验证一切)。

我通过执行以下操作解决了这个问题,您只验证从表单传入的字段。所以在你的行动中,你会做:

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
}

关于javascript - Model.Isvalid 在我的 MVC 4 应用程序中失败。如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com