处理多个提交按钮

时间:2011-01-31 12:04:57

标签: 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>

在视图中,我使用以下代码段

有条件地显示此用户控件
<% 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 个答案:

答案 0 :(得分:7)

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

<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
       }
    }
}