我想基于DropDownList中的值在List视图中实现过滤,在一种'postback'调用中,用户选择下拉值并单击Refresh按钮。我已经发现我应该将我的ViewData用于列出的模型,但是如何将所选值传递回采用过滤器参数的Index覆盖?
答案 0 :(得分:0)
使用Routing API。您可以在Global.asmx.cs
中配置新路由,这意味着对具有特定URL格式的控制器上的“索引”操作的调用将发送到正确的控制器。
答案 1 :(得分:0)
ProfK - 你可以通过几种方式做到这一点,我注意到你提到了一种'回发'的方法。在这种情况下,您最好这样做 - 回发过滤器值并在控制器索引方法中“解析”它们。这可能是一种方法:
public ActionResult Index()
{
string sComboValPerson = Request.Form["personfilter"];
// now do something with this value if it is't null
if (!string.IsNullOrEmpty(sComboValPerson ))
{
var items = _repository.Search(Model, sComboValPerson );
return View(items);
}
else
// return some kind of not found content or the 'normal' view
return View();
}
答案 2 :(得分:0)
为什么不将您的下拉列表放在具有GET的表单中。然后,您将生成一个类似于http://mysite.com/controller/action/?filterView=ByName
的网址。这样,您的最终用户就可以将过滤结果添加为书签,以便快速参考。如果你不想要的话,你也可以创建一条新路线?在网址中。
你的控制器将类似于下面的内容(由你来定义你的过滤逻辑,因为我不知道你是在做日期范围,摆脱重复,等等)。这假设您要按列过滤。
public ActionResult Index(string filterView = "")
{
var items = _repository.getItems();
// filter you items based on the filterView string
if (!string.IsNullOrEmpty(filterView ))
{
//do your filtering logic here
items = items.where(c=>c.FilterColumn = filterView);
}
//return the view with the items that result from the above operation or
//just the full list if no filtering was done
return View(items);
}