在部分视图上调用操作

时间:2013-07-08 15:17:56

标签: asp.net-mvc asp.net-mvc-4 razor

我是MVC的新手所以我可能无法完全了解如何在PartialViews中使用操作,所以请耐心等待。

我有一个带有表单的PartialView,我希望在提交时在PartialView的控制器上执行一个操作。但是,当我使用

时,我已经完成了这项工作
    @using (Html.BeginForm())
    {
        <div class="search-box">
            @Html.EditorFor(x => x.Keyword)
            <button type="submit" title="Search" id="searchButton">Search</button>
        </div>
    }

我没有在网址中获得任何参数,我希望人们能够深入链接到此搜索。如果我在BeginForm标记中添加Action和Controller,我会看到如下所示的URL:/ LostItems / Index?Keyword = phones返回404,因为它是PartialView而不是具有路由的View。

我该如何处理这个问题?如果表单位于View而不是PartialView上,它就可以正常工作,因为URL会路由到页面上的特定操作。

1 个答案:

答案 0 :(得分:0)

如果你想直接链接到一个整页(例如/ LostItems / Index?Keyword = phones),你就不能让一个动作方法返回局部视图

如果它是一个简单的单字搜索,则无需为此创建一个viewmodel类。

我猜你应该拥有的只是像

这样的东西
//controller
public ActionResult Index(string Keyword)
{
    var SearchResults = new List<SearchResult>()

    //
    // Get your search results
    if(!String.IsNullOrEmpty(Keyword))
    {
        SearchResults = GetSearchResults(Keyword) 
             //your code for getting the search results
    }
    return View(SearchResults)
}

查看:

@model List<SearchResult>
<h1>Search</h1>
@using(Html.BeginForm("Index", "ControllerName", FormMethod.Get))
{
    @Html.Label("Keyword", "Enter your Search Term")
    @Html.Texbox("Keyword")
    <input type="submit" value="Submit" />
}

@if(Model.Count > 0)
{
   //display the search results - could be in a partial view, with the model passed though like
   @Html.Partial("_resultsGrid", Model)
}

这应该通过GET工作,无论我是否指定了Keyword,但我可能是错的(在这种情况下需要一些路由来指定默认值)。

替代结构(特别是对于更复杂的搜索)是为搜索项创建视图模型,但是将搜索结果转储到Viewbag而不是模型中(因此searchTerm可以作为模型保留,如果发生变化则发布)