在我的productcontroller中,我有两个actionresult返回方法:
[Route("Shop/{brand}/{category}/{subcategory?}/{page:int?}")]
public ActionResult Index(string brand, string category, string subcategory, int? page, SortOptions currentSort = SortOptions.SinceDesc)
{ //...
和
[HttpPost]
[Route("Shop/{brand}/{category}/{subcategory?}/{page:int?}")]
public ActionResult Index(ProductsViewModel pvm)
{ //...
这是我的剃刀观点:
@using (@Html.BeginForm("Index", "Products", FormMethod.Post))
{
@Html.DropDownListFor(x => x.SubCatID, Model.SubCategoriesSelectList, new { @class = "multiselect" })
}
当我提交页面时,它会点击httppost方法,但网址仍然是:Shop / nike / shoes,即使我从下拉列表中选择子类别运行的鞋子。 我想有网址:
作为一个网络形式的人,我很难导航到新的网址并使用viewmodel属性作为参数。
编辑发布了我的用户界面: 解释我的ui:
第一个下拉列表应get
到子类别。例如:shop / nike / shoes / runningshoes
第二个应该发布'返回'对产品进行分类。
价格滑块应回发,因为它应该过滤。 (如果没有分页,将过滤客户端)
分页应该如此,你可以深层链接到某个页面:shop / nike / shoes / runningshoes / page2等。
答案 0 :(得分:1)
在BeginForm(...)
中,您最终必须使用Subcategory = "runningshoes"
这确实混合了GET传递的值,也就是在查询字符串中通过路由值字典传递的值,以及POST,它将是表单中的值,但将完成您尝试执行的操作。有关BeginForm(..)
重载Here on MSDN
你最终应该:
@using (@Html.BeginForm("Index", "Products", new { subcategory = "runningshoes" }, FormMethod.Post))
{
@Html.DropDownListFor(x => x.SubCatID, Model.SubCategoriesSelectList, new { @class = "multiselect" })
}
编辑
刚刚意识到你希望表单帖子中的值在响应的QueryString中。而不是直接从你的MVC方法返回视图的表格发布,你可能做的是return RedirectToAction("ActionName", "ControllerName", new { subcategory = request.SubCategory });
,你将有一个行动,专门支持这种重定向。
可以找到有关重定向到操作的其他信息here on MSDN