处理多个提交按钮

use*_*579 2 asp.net-mvc-2

我有一个强类型的用户控件,我用它来搜索特定的对象列表.以下代码显示了用户控件,

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

在View中,我使用以下代码片段有条件地显示此用户控件,

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

我已将表单放在呈现页面中,因为此控件在其他视图中使用,从而在不同的控制器中调用其他操作方法.

我的控制器操作方法中有以下方法签名,

[HttpPost]
public ActionResult CustomerList(CustomerFilterViewModel filterModel)
{

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

    return RedirectToAction("CustomerList", new { isFiltered = filtered || filterModel.IsFiltered });
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,通过这个实现,我如何单独识别单击哪个按钮("搜索"或"取消")并根据该代码编写代码.

mik*_*x14 7

要识别已传入的按钮,您可以通过向其添加名称属性来对按钮进行分组:

<input name="button" type="submit" value="Search" />&nbsp;
<input name="button" type="submit" value="Cancel" />
Run Code Online (Sandbox Code Playgroud)

然后,添加一个传递给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
       }
    }
}
Run Code Online (Sandbox Code Playgroud)