Обработка нескольких кнопок отправки - PullRequest
2 голосов
/ 31 января 2011

У меня есть Строго типизированный пользовательский элемент управления , который я использую для поиска определенного списка объектов.следующий код показывает пользовательский элемент управления,

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PeercoreCRM.ViewModels.CustomerFilterViewModel>" %>
<div style="width: 100%;vertical-align:top;background-color:White">    
    <fieldset>
        <legend>Criteria</legend>
        <table cellspacing="0">
            <tr>
                <td style="width: 100px">
                    <div class="editor-label">
                        <%: Html.LabelFor(m => m.LeadName) %>
                    </div>
                </td>
                <td>
                    <div class="editor-field">
                        <%: Html.TextBoxFor(m => m.LeadName) %>
                    </div>
                </td>
            </tr>

            <tr>
                <td style="width: 60px">
                    <div class="editor-label">
                        <%: Html.LabelFor(m => m.CustomerCode) %>
                    </div>
                </td>
                <td>
                    <div class="editor-field">
                        <%: Html.TextBoxFor(m => m.CustomerCode)%>                         
                    </div>
                </td>
            </tr>                            

            <tr>
                <td>
                    <input type="submit" name="btnSearch" value="Search" />&nbsp;
                    <input type="submit" name="btnCancel" value="Cancel" />
                </td>
                <td>
                </td>
            </tr>
        </table>

    </fieldset>
</div>

В представлении я показываю этот пользовательский элемент управления условно, используя следующий фрагмент кода:

<% using (Html.BeginForm("CustomerList", "Customer", new { isFiltered = Model.FilterViewModel.IsFiltered }, FormMethod.Post))
   {
    %>
<% if (Model.FilterViewModel.IsVisible) Html.RenderPartial("ListFilterUserControl", Model.FilterViewModel); %>
<% } %>

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

У меня есть следующая сигнатура метода в моем методе действия контроллера,

[HttpPost]
public ActionResult CustomerList(CustomerFilterViewModel filterModel)
{

    bool filtered = filterModel.IsDirty? FilterCustomers(filterModel):false;
    Session["CurrentPageNumber"] = null;

    return RedirectToAction("CustomerList", new { isFiltered = filtered || filterModel.IsFiltered });
}

Моя проблема, с этой реализацией , как я могу отдельно определить, какая кнопка нажата («Поиск» или «Отмена»), и написать код в зависимости от этого.

1 Ответ

7 голосов
/ 31 января 2011

Чтобы идентифицировать переданную кнопку, вы можете сгруппировать кнопки, добавив к ним атрибут имени:

<input name="button" type="submit" value="Search" />&nbsp;
<input name="button" type="submit" value="Cancel" />

затем добавьте переменную, которая передается в ваш метод post с тем же именем кнопок (в данном случае «button»), как это:

[HttpPost]
public ActionResult CustomerList(string button, CustomerFilterViewModel filterModel)
{
    if(button.Equals("Search")) 
    {
     bool filtered = filterModel.IsDirty? FilterCustomers(filterModel):false;
    Session["CurrentPageNumber"] = null;

    return RedirectToAction("CustomerList", new { isFiltered = filtered || filterModel.IsFiltered });
    } else {
       if(button.Equals("Cancel")) {
            //perform cancel
       }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...