我是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" })
点击此链接我默认获得索引视图(没有搜索参数),用户必须再次填写。 记住用户搜索参数的最佳做法是什么? 谢谢你的任何建议。
答案 0 :(得分:0)
正如devqon所说,首选的方法是使用查询参数,但听起来好像你的用法可能会让这个管理有点难以理解
TempData / SessionData可能会解决您的问题,但如果用户决定在多个标签/窗口中使用您的应用程序(它们将共享相同的搜索参数),则使用此方法会导致问题。
可能值得研究的东西是SessionStorage。(链接如下)
只要浏览器保持打开状态,此类存储就会一直存在
而且重要的是
在新标签页或窗口中打开页面将导致启动新会话
所以你的页面不应该共享状态。
此处有更多详情: https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage