1

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

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

我应该如何处理这个问题?如果表单在 View 而不是 PartialView 上,它会工作得很好,因为 URL 路由到页面上的特定操作。

4

1 回答 1

0

如果您想直接链接到整个页面(如 /LostItems/Index?Keyword=phones ),则不能让操作方法返回部分视图

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

我猜你应该有什么就像

//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 工作,但我可能是错的(在这种情况下,需要一些路由来指定默认值)。

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

于 2013-07-09T15:41:59.747 回答