C# 控制器/动作流程,带“控制”;“三阶段操作”;?

C# 控制器/动作流程,带“控制”;“三阶段操作”;?,c#,asp.net-mvc,C#,Asp.net Mvc,我在创建ASP.NET MVC 3控制器时反复遇到一个问题,但我没有找到一个好的解决方案/设计。通常我想创建一个搜索页面,因此我创建了我的控制器: public class MyEntityController: Controller { public ActionResult Search() { return View(); } } 这允许我显示用户输入搜索参数的视图。提交搜索时,我通常会创建一个操作来接收搜索参数并执行实际搜索: [HttpPost] pu

我在创建ASP.NET MVC 3控制器时反复遇到一个问题,但我没有找到一个好的解决方案/设计。通常我想创建一个搜索页面,因此我创建了我的控制器:

public class MyEntityController: Controller {
    public ActionResult Search() {
        return View();
    }
}
这允许我显示用户输入搜索参数的视图。提交搜索时,我通常会创建一个操作来接收搜索参数并执行实际搜索:

[HttpPost]
public ActionResult Search(SearchEditModel model) {
    IList<IMyEntity> results = ...; // Do the actual search.
    SearchResultsViewModel resModel = ...; // Convert it into a view model.

    // NOW WHAT?
}
[HttpPost]
公共行动结果搜索(SearchEditModel){
IList results=…;//执行实际搜索。
SearchResultsViewModel resModel=…;//将其转换为视图模型。
//现在怎么办?
}

问题是,我现在该怎么办?我需要将搜索结果发送到视图以显示它们。但是我不能只调用
返回视图(resModel)因为搜索视图已经用于让用户输入搜索参数。这似乎不是一个非常罕见的情况,所以我猜有一种“正确的方法”可以做到这一点。

准备视图以显示搜索结果并使用:

return View("YourViewName",resModel);
大卫

实际上,我并不认为以类似于你现在的方式来处理这个问题有什么问题。但是,我会使用一个包含搜索IList和高级搜索“参数”(即SearchEditModel)的viewmodel。这样,您可以在视图的下半部分返回搜索结果,而搜索参数在上半部分仍然可见。这将提供额外的好处,允许您在需要时进一步优化搜索。当然,您必须修改httpget和httppost操作的签名以适应这一点

当然,您的里程数可能会有所不同