同一页面ASP.net MVC中的多个表单

Chl*_*bta 11 asp.net-mvc

我正在开发我的第一个ASP.net MVC项目,并且在同一页面中使用多个表单时出现了一些问题.首先我创建了2个部分类:(*注册将允许用户注册,*登录它允许用户登录.)

然后我使用HTML.render将它们集成到我的"Logpage"中.所以我要使用2个不同的动作.像这个:

        [HttpPost]
    public ActionResult Login(LogModel.Login Model)
    {
        if (ModelState.IsValid)
        {

            if (LogModel.Login.Verifuser(Model.IDUser, Model.Password))
            {
                FormsAuthentication.SetAuthCookie(Model.IDUser, false);
                if (LogModel.Login.IsAdmin(Model.IDUser, Model.Password))
                {
                    return View("Admin/Index");
                }
                else
                {
                    return View("Agence/Index");
                }
            }
            else
            {
                ModelState.AddModelError("", "Invalide username or Password");
                return View(Model);
            }
        }
        return View(Model);
    }
Run Code Online (Sandbox Code Playgroud)

在错误情况下我重定向到新页面的问题(白页包含验证摘要).所以我想知道如何在我的默认页面Logpage中显示此错误消息.

Nic*_*ork 26

您可以使用三个操作和一个复杂模型来解决此问题.

 public class LoginOrRegisterViewModel
 {
      public Models.RegisterViewModel Register { get; set; }
      public Models.LoginViewModel Login { get; set; }
 }


 [HttpGet]
 public ActionResult Login()
 {
      return View("Login", new LoginOrRegisterViewModel());
 }

 [HttpPost]
 public ActionResult Register(Models.LoginViewModel model)
 {
      if(!ModelState.IsValid)
           return View("Login", new LoginOrRegisterViewModel(){ Register = model });
      else
      {
           //TODO: Validate the user
           //TODO: Write a FormsAuth ticket
           //TODO: Redirect to somewhere
     }
 }

 [HttpPost]
 public ActionResult Login(Models.RegistrationViewModel model)
 {
      if(!ModelState.IsValid)
           return View("Login", new LoginOrRegisterViewModel(){ Login = model});
      else
      {
           //TODO: CRUD for registering user
           //TODO: Write forms auth ticket
           //TODO: Redirect
     }
 }
Run Code Online (Sandbox Code Playgroud)

在您的代码中,请确保您设置表单的操作:

 @model Models.LoginOrRegisterViewModel

 @using(Html.BeginForm("Login", "Controller", FormMethod.Post, new { id = "loginForm"}))
 {
       @Html.EditorFor(m => Model.Login)
 }

 @using(Html.BeginForm("Register", "Controller", FormMethod.Post, new { id = "registerForm"}))
 {
       @Html.EditorFor(m => Model.Register)
 }
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,您的第二个POST方法应该称为Register. (2认同)
  • 对我来说,我必须在两种 POST 方法上都将 LoginOrRegisterViewModel 作为输入参数。仅将底层之一(注册/登录视图模型)作为参数在模型内给出空值。 (2认同)