我可以在asp.net mvc控制器中使用多个Post方法吗?

时间:2013-08-02 14:44:39

标签: asp.net-mvc asp.net-mvc-3

我有两个视图,一个是CustomerDetail.cshtml,另一个是PAymentDetail.cshtml,我有一个控制器QuoteController.cs。

两个视图都有提交按钮,两个视图的HTTPPOST方法都在QuoteController.cs中。

[HttpPost]
public ActionResult CustomerDetail(FormCollection form)
{
}

[HttpPost]
public ActionResult PAymentDetail(FormCollection form)
{
}

现在,当我点击付款详细信息的提交按钮时,它正在调用/路由到CustomerDetail的HttpPost方法而不是PAymentDetail。

有人可以帮我吗?我做错了什么?两种形式的方法都是POST。

3 个答案:

答案 0 :(得分:4)

对于PaymentDetail,您可以在视图中使用它:

@using(Html.BeginForm("PAymentDetail","Quote",FormMethod.Post)) 
{
  //Form element here 
}

结果html将是

<form action="/Quote/PAymentDetail" method="post"></form>

客户明细

相同
@using(Html.BeginForm("CustomerDetail","Quote",FormMethod.Post)) 
{
  //Form element here
}

希望有所帮助。只要这些方法具有不同的名称,在同一个控制器中使用两个post方法就不是问题。

除了FormCollection以外的更好的方法,我推荐这个。 首先,您创建一个模型。

public class LoginModel
{
    public string UserName { get; set; }
    public string Password { get; set; }
    public bool RememberMe { get; set; }
    public string ReturnUrl { get; set; }

}

然后,在视图中:

@model LoginModel
@using (Html.BeginForm()) {

<fieldset>
    <div class="editor-label">
        @Html.LabelFor(model => model.UserName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.UserName)
        //Insted of razor tag, you can create your own input, it must have the same name as the model property like below.
        <input type="text" name="Username" id="Username"/>
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.Password)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Password)
    </div>
    <div class="editor-label">
        @Html.CheckBoxFor(m => m.RememberMe)    
    </div>
</fieldset>
  }

这些用户输入将映射到控制器。

[HttpPost]
public ActionResult Login(LoginModel model)
{
   String username = model.Username;
   //Other thing
}

祝你好运。

答案 1 :(得分:1)

绝对!只需确保您使用正确的操作方法发布,请检查呈现的HTML的form标记。

此外,FormCollection对于MVC来说不是一个好的设计。

答案 2 :(得分:0)

如果您只想拥有一个网址,可以采用另一种方法:http://www.dotnetcurry.com/ShowArticle.aspx?ID=724

我们的想法是使用表单元素(按钮或隐藏元素)来决定提交的表单。然后编写一个自定义操作选择器(http://msdn.microsoft.com/en-us/library/system.web.mvc.actionmethodselectorattribute.aspx),它决定将调用哪个操作。