确定在asp.net MVC中使用哪个提交按钮来发布表单

时间:2009-10-12 16:46:37

标签: asp.net-mvc

我在asp.net MVC中有一个视图,它有两个提交按钮。我想知道按下了哪个按钮。按钮工作很棒所以那里没有问题,我只需要根据哪个按钮做一些略有不同的事情。我检查了Request.Form []集合,但不包含任何内容。

这是我的观看代码......

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Data.TempPerson>" %>
<div class="phonePerson">
    <% using (Ajax.BeginForm("Create", new AjaxOptions
       {
           UpdateTargetId = "divList",
           HttpMethod = "Post",
           OnSuccess = "RedoLayout"
       }))
       { %>
    <label for="Name">
        Name:</label>
    <%= Html.TextBox("Name")%>
    <input type="submit" name="Button" id="Save" value="Save" class="btnSave" />
    <div id="phoneList" class="phoneList">
        <table>
            <% foreach (var item in Model.Phones)
               { %>
                 ... Stuff omitted for space ....
            <% } %>
            <tr>
                <td colspan="2">
                    <input type="submit" id="Add" name="Button" value="Add another phone" class="btn_AddPhone" />
                </td>
            </tr>
        </table>
        <% } %>
    </div>
</div>

3 个答案:

答案 0 :(得分:3)

两种方式:

首先,名为“Button”的“Create”函数的字符串参数

public ActionResult Create(string Button)//and other fields
{
if (Button == value1) then
    //do stuff
else if (Button == value2) then
   //do stuff
end if 
//return
}

其中value1 =“添加另一部手机”

如果您使用表单集合传递它,那么它将是

if(formcollection [“Button”] == value1)....

答案 1 :(得分:3)

我很想补充一点,我已经使用了两个表单,每个表单都有一个提交按钮,以确保每个表单只有一个单一的责任。这将有助于分离关注点并使应用程序更易于测试。

答案 2 :(得分:1)

也许这太简单了,但为什么不简单地在每个提交控件中使用PostBackUrl属性,并在其查询字符串中添加一个参数?

例如,

<asp:Button ID="Button1" runat="server" Text="Button One" 
 PostBackUrl="Text.aspx?b=1" UseSubmitBehavior="true" ... / >

<asp:Button ID="Button2" runat="server" Text="Button One" 
 PostBackUrl="Text.aspx?b=2" UseSubmitBehavior="true" ... / >

可以在服务器端捕获“b”查询字符串参数:

string mode = HttpContext.Current.Request.QueryString["b"].ToString();

...然后你根据模式变量的值来做不同的事情。