我在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>
答案 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();
...然后你根据模式变量的值来做不同的事情。