我有强类型用户控件,我用它来搜索特定的对象列表。 以下代码显示了用户控件
<%@ 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" />
<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 });
}
我的问题是,使用此实现,如何分别识别单击哪个按钮(“搜索”或“取消”)并根据该代码编写代码。
答案 0 :(得分:7)
要识别传入的按钮,您可以通过为其添加名称属性来对按钮进行分组:
<input name="button" type="submit" value="Search" />
<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
}
}
}