Определение того, какая кнопка отправки была использована для отправки формы в asp.net MVC - PullRequest
2 голосов
/ 12 октября 2009

У меня есть вид в 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 ]

3 голосов
/ 12 октября 2009

Я хотел бы добавить, что использовал бы две формы, каждая с одной кнопкой отправки, чтобы гарантировать, что каждая форма несет только одну ответственность. Это поможет разделить проблемы и сделает приложение более тестируемым.

3 голосов
/ 12 октября 2009

Два способа:

Во-первых, строковый параметр вашей функции «Создать» с именем «Кнопка»

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 голос
/ 09 ноября 2012

Возможно, это слишком просто, но почему бы просто не использовать атрибут 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();

... и затем вы делаете разные вещи, основываясь на значении, в данном случае, переменной режима.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...