【发布时间】:2015-04-14 11:23:58
【问题描述】:
我有一个视图,该视图包含创建用户和登录表单。对于两者,我有不同的模型。当用户单击“注册”按钮时,我将传递注册模型值并单击登录,我将传递模型值。我还在模型中添加了一些验证(您可以在下面看到我的代码)。 因为我有两个模型,所以我又添加了一个模型(帐户),它同时保存了这个模型。单击注册或登录时,我将这个模型(帐户)从视图传递到控制器。 模型一直无效的原因是,当用户单击登录按钮时,正在传递具有注册和登录模型但只有登录详细信息的帐户模型。注册模型的所有值都将为空,因为用户单击登录(那里只有登录数据)。所以在控制器中 Model.Is valid 总是假的,因为寄存器模型没有值。
那么还有其他方法可以验证特定模型吗? 这种情况下的解决办法是什么?
@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;}
}
【问题讨论】:
-
Register()和Login()是两种不同的方法(而Register()是一次性的,永远不会重复的操作)。为什么它们是一种形式? -
@SamiKuhmonen 恐怕这只是网络表单。
-
我的一个视图包含注册表和登录。对于这两个我有不同的模型。 Register() 方法将在注册按钮的点击时被调用。登录方法将被称为登录按钮的单击。我将注册和登录都保留在一个视图中。
-
我现在从您的编辑中看到您正在使用 2 个表单。除了它必须是
public ActionResult Login([Bind(Prefix="LoginModel")]LoginModel model)之外,您没有任何问题。
标签: javascript c# .net asp.net-mvc