asp.net mvC语言 在同一页面中显示搜索表单及其结果的最佳方式



假设我有一个带有文本框的简单搜索表单。提交表单后,我将文本框的内容发送给存储过程,存储过程将返回结果。我希望结果显示在同一页的形式,只是下面。

现在我正在做下面的事情,但是它并没有完全按照我想要的方式工作:

我的SearchController的"Index"视图

@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中的一些最佳实践

您可以在ViewData对象中返回结果,然后仅在视图中显示它是not null

非常类似于这个问题MVC 3表单post和持久化模型数据

对于这个实例,看起来你没有将结果传递给你的局部视图。试试这个?

@{ Html.RenderPartial("SearchResults", Model.Results);

由于没有使用模型保存搜索信息,因此在发布搜索表单时搜索信息将丢失。

考虑到您的设计和既定目标,最好将Index视图中的表单转换为Ajax表单,然后控制器可以将部分视图发送回去,以填充Ajax表单下面的div。

counsellorben

最新更新