一尘不染

asp.net MVC 4通过不同的形式发布多个

c#

现在我明白了

if (IsPost){   //do stuff }

检查该页面上的所有发布方法。但是,我有2种不同的形式发布2种不同的信息。这些是登录表单和注册表单。

有什么方法可以根据哪种形式检查IsPost?例如,

if(Login.IsPost){ //do stuff }

但是我该如何定义Login变量?我的表格如下:

<form id="Login" method = "POST">

我努力了:

var Login = Form.["Login"]

那没起效。

我将不胜感激。

谢谢。


阅读 355

收藏
2020-05-19

共1个答案

一尘不染

在MVC视图中,您可以根据需要拥有任意数量的表单,其中包含多个字段。为简单起见,请使用单个视图模型以及页面上每种表单所需的所有属性。请记住,您将只能访问您提交的表单中的表单字段数据。因此,如果您在同一页面上有登录表单和注册表单,则可以这样进行:

LoginRegisterViewModel.cs

public class LoginRegisterViewModel {
    public string LoginUsername { get; set; }
    public string LoginPassword { get; set; }

    public string RegisterUsername { get; set; }
    public string RegisterPassword { get; set; }
    public string RegisterFirstName { get; set; }
    public string RegisterLastName { get; set; }
}

YourViewName.cshtml

@model LoginRegisterViewModel

@using (Html.BeginForm("Login", "Member", FormMethod.Post, new {})) {

    @Html.LabelFor(m => m.LoginUsername)
    @Html.TextBoxFor(m => m.LoginUsername)

    @Html.LabelFor(m => m.LoginPassword)
    @Html.TextBoxFor(m => m.LoginPassword)

    <input type='Submit' value='Login' />

}

@using (Html.BeginForm("Register", "Member", FormMethod.Post, new {})) {

    @Html.LabelFor(m => m.RegisterFirstName)
    @Html.TextBoxFor(m => m.RegisterFirstName)

    @Html.LabelFor(m => m.RegisterLastName)
    @Html.TextBoxFor(m => m.RegisterLastName)

    @Html.LabelFor(m => m.RegisterUsername)
    @Html.TextBoxFor(m => m.RegisterUsername)

    @Html.LabelFor(m => m.RegisterPassword)
    @Html.TextBoxFor(m => m.RegisterPassword)

    <input type='Submit' value='Register' />

}

MemberController.cs

[HttpGet]
public ActionResult LoginRegister() {
     LoginRegisterViewModel model = new LoginRegisterViewModel();
     return view("LoginRegister", model);
}

[HttpPost]
public ActionResult Login(LoginRegisterViewModel model) {
 //do your login code here
}

[HttpPost]
public ActionResult Register(LoginRegisterViewModel model) {
 //do your registration code here
}

别忘了,在调用BeginForm时,您传递的控制器名称不带“ Controller”:

@using (Html.BeginForm("Login", "Member", FormMethod.Post, new {}))

代替:

@using (Html.BeginForm("Login", "MemberController", FormMethod.Post, new {}))
2020-05-19