我是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会路由到页面上的特定操作。
答案 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可以作为模型保留,如果发生变化则发布)