Asp.net-Mvc

同一頁面中的多個表單 ASP.net MVC

  • March 25, 2021

我正在處理我的第一個 ASP.net MVC 項目,並且在同一頁面中使用多種表單時遇到了一些問題。首先,我創建了 2 個部分類:(*Register 將允許使用者註冊,*Login 它允許使用者登錄。)

然後我使用 HTML.render 將它們集成到我的“日誌頁”中。所以我必須使用 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);
   }

在錯誤情況下我被重定向到新頁面的問題(白頁包含驗證摘要)。所以我想知道如何在我的預設頁面 Logpage 中顯示此錯誤消息。

您可以通過三個動作和一個複雜的模型來解決這個問題。

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

在您的程式碼中,確保您設置了表單的操作:

@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)
}

引用自:https://stackoverflow.com/questions/9997874