记住搜索参数

时间:2016-12-20 12:11:43

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

我是mvc的新手,我尝试使用table和ajax搜索创建一个简单的页面。

例如,我有一个搜索模型,它将参数从表单传递给控制器​​。

型号:

public class OrderSearchViewModel
{
    [Display(ResourceType = typeof(Lang), Name = "OrderID")]
    public int? OrderID { get; set; }

    [Display(ResourceType = typeof(Lang), Name = "DeliveryType")]
    public int? DeliveryTypeID { get; set; }

    [Display(ResourceType = typeof(Lang), Name = "Partner")]
    public string CustomerName { get; set; }

    public SelectList DeliveryTypes { get; set; }

}

在控制器中,我有一个动作,返回带有窗体的视图:

public ActionResult Index()
{
  var ordersSearchModel = // default init;
  return View(model);
}

在我的Index.cshtml中,我有一个表单

@model Models.Order.OrderSearchViewModel

<div class="row">

@using (Ajax.BeginForm("Orders", "Order", new AjaxOptions {UpdateTargetId = "ordersList"}, new {@id = "searchForm", @class = "form-horizontal"}))
{
         // Editors templates for each params           
}
</div>

<div id="ordersList" class="row">

</div>  
}

在我的控制器中,我有一个方法,采取搜索模型并返回局部视图

[HttpPost]
public async Task<ActionResult> Orders(OrderSearchViewModel model, int page = 1, int pageSize = 50)
{
  var models = // connect to db and get data filtered by model params   
  return PartilaView("_View", models);         
}

在结果部分我有一个带有订单号的表和链接到编辑视图。 在编辑视图中,我有一个返回搜索的链接:

@Html.ActionLink("Back", "Index", "Order", new { @class = "btn btn-default" })

点击此链接我默认获得索引视图(没有搜索参数),用户必须再次填写。 记住用户搜索参数的最佳做法是什么? 谢谢你的任何建议。

1 个答案:

答案 0 :(得分:0)

正如devqon所说,首选的方法是使用查询参数,但听起来好像你的用法可能会让这个管理有点难以理解

TempData / SessionData可能会解决您的问题,但如果用户决定在多个标签/窗口中使用您的应用程序(它们将共享相同的搜索参数),则使用此方法会导致问题。

可能值得研究的东西是SessionStorage。(链接如下)

只要浏览器保持打开状态,此类存储就会一直存在

而且重要的是

  

在新标签页或窗口中打开页面将导致启动新会话

所以你的页面不应该共享状态。

此处有更多详情: https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage