如何使用先前输入的参数重新加载页面?

时间:2015-03-16 20:58:35

标签: c# html asp.net asp.net-mvc

我正在开发Asp.net MVC中的代码项目。我在完成操作后重定向用户时遇到问题。我有这些控制器:

索引搜索页面:

public ActionResult Index(){

    //this method sets up viewmodel data for search preferences

    Viewmodel obj = new Viewmodel();
    //set values of dropdowns and searching capabilities
    return View("Search", obj);
}

然后用户填写视图中的搜索框,选择下拉列表。这将返回一个处理数据的帖子搜索方法:

[HttpPost]
public ActionResult Index(Viewmodel obj, int? page)
{
    data = from i in db.Database
           select i;

    if(!String.IsNullOrEmpty(obj.Example)
    {
        data = data.Where(x => x.poss == obj.poss);
    }

    //PAGING and other data formatting here

    return View("Results", data);
}

显示结果列表后,我在结果视图中有一个复选框/按钮系统,允许用户选择多个结果并将其标记为" Good"," Bad"等等。这是一种非常简单地更改数据库的方法。我的问题是,在数据库改变数据后,我不知道如何将用户返回到他们所在的确切结果集。返回void的方法不起作用,并且参数不是分开的(一个整个视图模型),因此我不能简单地保存URL并将它们返回到唯一的URL。我想保持viewmodel作为参数。如何保存包含其搜索偏好的viewmodel数据以供稍后使用,以及页码,而不将我的方法更改为:

[HttpPost]
public ActionResult Index(string dropdown1, string dropdown2, int num......){}

2 个答案:

答案 0 :(得分:1)

我做的一件事是将视图模型保存到会话中。然后我在索引方法中反序列化。索引方法中有类似的东西:

[HttpGet]
public ActionResult AdvancedSearch()
{

        HttpContext currentContext = System.Web.HttpContext.Current;
        AdvancedSearchViewModel advancedSearchViewModel = (AdvancedSearchViewModel)Session["AdvancedSearchViewModel"];
        if (advancedSearchViewModel == null)
        {
            advancedSearchViewModel = new AdvancedSearchViewModel();
            AddAdvancedSearchLists(advancedSearchViewModel, currentContext);
        }

        return View(advancedSearchViewModel);

    }

以下是在帖子中保存到会话的一些代码:

Session["AdvancedSearchViewModel"] = advancedSearchViewModel;

请注意,如果您有列表框(下拉菜单和多选),则必须在post方法中重建列表框并重新选择选择(对于多选)。 HTML是无状态的。 MVC不会将列表框内容发送回帖子上的服务器,它只发送所选内容。

答案 1 :(得分:1)

您可以使用TempData来实现此目的。

在POST Index操作中将ViewModel和Page存储在TempData中。用于接受和存储数据库中的结果状态(即好,坏等等)的操作方法将能够从TempData访问ViewModel和Page,因为它是下一个立即请求。数据库操作完成后,只需使用RedirectToAction,并在TempData中显示ViewModel和Page。

如果更新结果状态的操作不是下一个立即请求,那么您需要将数据保存在BGStack应答的会话中。

相关问题