在我的MVC应用程序中,我有一个搜索页面,它将显示一些数据输入框和一个"提交"按钮执行搜索...这一切都很好,花花公子,按预期工作。
但是,我需要实施一个"深层链接"搜索机制,其中数据输入字段从URI字符串预先填充,然后执行搜索。
如何让Controller的Index
方法显示主视图,然后执行Search
方法来填充视图的<div id="results">
。
@model Models.SearchRequest
@using (Ajax.BeginForm("Search", new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "results" }))
{
@Html.AntiForgeryToken();
.
.
. Data entry boxes for search
.
.
<div>
<input type="submit" value="Search" />
</div>
<div id="results">
<!-- Results of search go her -->
</div>
}
public ActionResult Index([FromUri] Models.SearchRequest request)
{
.. validation of the request
return View(request);
}
public ActionResult Search(Models.SearchRequest request)
{
ViewModels.ResultsVM results = ... stuff that executes the search ...
return PartialView("ResultsPV", results);
}
@model ViewModels.ResultsVM
.
.
. Lots of Razor to display the data
答案 0 :(得分:0)
实际上,我刚刚解决了这个问题。
-1在我的SearchRequest
模型中,我添加了
public ViewModels.ResultsVM Result;
-2更改了要添加的Index
方法
if (...uri data is valid...)
{
request.Result = ExecuteSearch(request);
}
-3将Search
方法更改为
return PartialView("ResultsPV", ExecuteSearch(request));
-4提取了实际搜索到新方法的所有代码
private ViewModel.ResultsVM ExecuteSearch(Models.SearchRequest request)
{
ViewModels.ResultsVM results = /* stuff that executes the search */
return (results);
}
-5。将<div id="results">
更改为...
<div id="results">
@if (Model.Result != null)
{
@Html.Partial("ResultsPV", Model.Result)
}
</div>