假设我有一个带文本框的简单搜索表单。在提交表单后,我将文本框的内容发送到存储过程,然后返回给我结果。我希望结果显示在表单的同一页面上,除了它下面。
现在我正在做以下事情,但它并没有按照我想要的方式运作:
我的SearchController的“索引”视图
@using (Html.BeginForm("SearchResults", "Search", FormMethod.Post, new { @class = "searchform" }))`{
<fieldset>
<legend>Name</legend>
<div class="editor-label">
@Html.Label("Search")
</div>
<div class="editor-field">
@Html.TextBox("Name")
</div>
<input type="submit" value="Search" class="formbutton" />
</fieldset>
@{ Html.RenderPartial("SearchResults", null);
这是我的“SearchResults”视图:
@model IEnumerable<MyProject.Models.spSearchName_Result>
<table>
@foreach (var item in Model)
{
<tr>
<td>
@item.Name
</td>
</tr>
}
</table>
这是我的控制器:
// GET: /Search/SearchResult
[HttpPost]
public ActionResult SearchResult(FormCollection collection)
{
var result = myentity.spSearchName(collection["Name"]);
return PartialView("SearchResults", result);
}
我似乎只能将结果显示在一个全新的页面上(不是作为局部视图嵌入),或者当我加载搜索页面时出现错误,因为没有结果(因为我没有搜索了。)
有没有更好的方法来实现我想要做的事情?我觉得我反对MVC中的一些最佳实践。
答案 0 :(得分:3)
您可以在ViewData
对象中返回结果,然后仅在视图中显示not null
。
答案 1 :(得分:3)
非常类似于这个问题MVC 3 form post and persisting model data
对于此实例,您似乎没有将结果传递给局部视图。试试这个?
@{ Html.RenderPartial("SearchResults", Model.Results);
答案 2 :(得分:1)
由于您没有使用模型保存搜索信息,因此搜索表单发布时搜索信息将会丢失。
鉴于您的设计和既定目标,最好将索引视图中的表单转换为Ajax表单,然后您的控制器可以将您的部分视图发送回来填充Ajax表单下方的div。
counsellorben