ASP.Net MVC - 将发布的值传递给视图

时间:2009-12-02 21:07:50

标签: asp.net-mvc

我正在创建一个搜索页面,用户在文本框中键入并单击“搜索”,控制器在其Action方法中采用FormCollection。

我进行搜索并将结果返回给视图但是我想将用户搜索的内容返回给视图。 TempData是最适合这个的地方还是风险?

5 个答案:

答案 0 :(得分:6)

我会说结果视图的模型应包含结果和搜索条件。

示例:

public class ResultsViewModel
{
     public SearchModel SearchCriteria { get; set; }
     ...
}

public class SearchModel
{
     public string Category { get; set; }
     ...
}

然后,只需在结果视图模型中填充SearchCriteria,就可以从那里检索它。

这假设您的结果视图强烈输入ResultsViewModel

答案 1 :(得分:4)

TempData主要用于将操作的结果重定向到另一个操作,并且您需要保留一些状态。

您需要做的就是使用“用户搜索的内容”向ViewData字典添加另一个条目。大致像这样:

public ActionResult Search(FormCollection form) 
{
  // search algorithm

  ViewData["keywords"] = form["keywords"];
  return View();
}

答案 2 :(得分:2)

TempData是指下次用户请求其他内容时您需要该项目。使用ViewData是您正在寻找的。还要记住,他/她搜索的值在视图中仍然可以Request[searchBoxName]

答案 3 :(得分:1)

使用上述两个建议都可行,但最好将所需数据添加到模型中,而不是通过ViewData传递。

如果您在模型中传递它,那么您将获得强类型的优势,并且无需添加逻辑来将ViewData条目强制转换为您的视图。

答案 4 :(得分:1)

使用视图模型创建强类型视图,该视图模型将您想要的所有信息传递给视图并对所有用户估算的信息进行编码。

 public class ResultsSetViewModel
{
    public string Query { get; set; }

    public IList<Result> Results { get; set; }
}

对用户估算的数据进行编码。

<h3>Search Results For: <%=Html.Encode(Model.Query) %></h3>