C# MVC2局部视图,搜索控制-设计/实施

C# MVC2局部视图,搜索控制-设计/实施,c#,asp.net,asp.net-mvc-2,C#,Asp.net,Asp.net Mvc 2,我有一个局部视图,它是一个搜索文本框和按钮 我试图使它成为一个局部视图,以便我可以在几个地方渲染它。当用户单击搜索时,我希望它重定向到/Home/search,它将根据放入搜索框的内容显示项目列表 这是正确的方法吗?还是应该让表单只运行/Home/Search Index()操作,而不使用局部视图控制器 局部视图 model.searchTerm)%%> 局部视图控制器 公共类SearchBoxController:控制器 { 公共操作结果搜索(ViewModels.SearchViewMo

我有一个局部视图,它是一个搜索文本框和按钮

我试图使它成为一个局部视图,以便我可以在几个地方渲染它。当用户单击搜索时,我希望它重定向到/Home/search,它将根据放入搜索框的内容显示项目列表

这是正确的方法吗?还是应该让表单只运行/Home/Search Index()操作,而不使用局部视图控制器

局部视图

model.searchTerm)%%>
局部视图控制器
公共类SearchBoxController:控制器
{
公共操作结果搜索(ViewModels.SearchViewModel项目)
{
Models.DataClasses1DataContext db=新模型.DataClasses1DataContext();
List retVal=(从p到db.Items)
其中p.Name.Contains(item.searchTerm)
选择p.ToList();
return RedirectToAction(“Search”,“Home”);//没有数据……怎么办????
}
}
或者我应该让表单只运行/Home/Search Index()操作,而不使用局部视图控制器吗


当然可以。总而言之,不需要部分控制器,特别是当它涉及到额外的重定向时。

这是实现此搜索控件的正确方法还是有更好的方法?这就是我在asp.net MVC和常规asp.net(在这种情况下使用简单表单)中所做的工作,并且对我来说效果非常好。删除任何不必要的请求总是好的。至于缺点,你不能把它放在视图中已经有表单的地方,这通常不是在MVC中如何构建视图的问题(至少我把BeginForm放在字段附近)。请注意,您仍然可以使用Html.BeginForm(语法,只需使用与您要调用的控制器相匹配的适当值)。顺便说一句,它几乎是自包含的,而不是对搜索页面的明显依赖性(您已经有了)。此外,根据您使用它的方式,您可以让表单执行GET而不是post,如果您希望在查询字符串中始终包含搜索词(就像您通常对分页所做的那样)-就像google url过去一样(现在使用的是他们放在后面的客户端内容)/必应这样做。
    <% using (Html.BeginForm("Search", "SearchBox")) {%>
                <%: Html.TextBoxFor(model => model.searchTerm) %>
                <input type="submit" value="Search" />
    <% } %>
  public class SearchBoxController : Controller
    {
        public ActionResult Search(ViewModels.SearchViewModel item)
        {
            Models.DataClasses1DataContext db = new Models.DataClasses1DataContext();
            List<Models.Item> retVal = (from p in db.Items
                                        where p.Name.Contains(item.searchTerm)
                                        select p).ToList();
            return RedirectToAction("Search", "Home"); //No data... What to do????
        }
    }