2011-05-04 53 views
4

假设我有一个带有文本框的简单搜索表单。在提交表单时,我将文本框的内容发送给存储过程,该存储过程将结果返回给我。我希望结果显示在表单所在的同一页面上,除了下面的页面。在同一页面显示搜索表单及其结果的最佳方式?

现在我做以下,但它不工作正是我想要的方式:

“索引”我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); 

这是我的“SearchResult所”观点:

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

回答

3

如果是not null,您可以将结果返回到ViewData对象,然后仅在视图上显示它。

1

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

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

counsellorben

相关问题