我的mvc项目中有这样的方法:
[Route("Categories/{categoryId}")]
public ActionResult List(SearchQueryCommand searchQuery) {
//Stuff
return View();
}
因此,此方法称为:'www.myweb.com/Categories/212'
但是我有一个下拉列表,其中包含一个表单,可以对此查询进行排序并将其再次发送回服务器以获取排序结果。 我的剃刀观点中有这个:
@using (Html.BeginForm(new { categoryId = Model.CategoryId }))
{
<div>
<small>@Html.LabelFor(m => m.Order, "sort by")</small>
@Html.DropDownListFor(m => m.Order, Model.ProductSortByOptions, new { onchange = "this.form.submit();" })
<button class="nojs" type="submit">ok</button>
</div>
}
我的问题是我不知道如何格式化我的代码,以便在我的网址中添加:'www.myweb.com/Categories/213?Order=MinPrice'
。
我可以选择执行此操作吗?
答案 0 :(得分:2)
表单的方法必须是GET
:
@using (Html.BeginForm(new { categoryId = Model.CategoryId }, FormMethod.Get))
这样,提交表单时,所有表单字段都将添加到URL中的查询字符串中。
要发布到特定操作方法,您需要在BeginForm
定义中指定它们。我对基于属性的路由定义不太熟悉,但其中一个应该可以工作:
@using (Html.BeginForm("List", "Categories", new { categoryId = Model.CategoryId }, FormMethod.Get))
或者
@using (Html.BeginForm("Index", "Categories", new { categoryId = Model.CategoryId }, FormMethod.Get))
答案 1 :(得分:1)
我找到了解决方案!并且不在Html.BeginForm
我的代码是这样的:
<form action="@Url.Action()" method="get">
<div>
<small>@Html.LabelFor(m => m.Order, "ordenar por")</small>
@Html.DropDownListFor(m => m.Order, Model.ProductSortByOptions, new { onchange = "this.form.submit();" })
<button class="nojs" type="submit">ok</button>
</div>
</form>
这始终将我的表单操作设置为:{Categories}/{categoryId}
,因为是GET
,Order
将被设置为我想要的查询参数。
答案 2 :(得分:1)
我使用RedirectToRoute在beginform POST方法中路由params,这会生成302 http响应,但我不知道其他方法。
routes.MapRoute(
name: "list",
url: "{bti}-e-{bop}-e-{blo}-e-{bzo}-e-{bpr}-e-{bha}-e-{bor}",
defaults: new { controller = "home", action = "list", bpr = UrlParameter.Optional, bha = UrlParameter.Optional, bor = UrlParameter.Optional }
);
行动得到:
public ActionResult li(int activepage = 0, Buscador bu = null)
{
your code...
return View(model);
}
行动职位:
[HttpPost]
public ActionResult li(int activepage = 0,Buscador bu = null)
{
..my code to format values...
..send values below that interest me routing..
return RedirectToRoute("list", new System.Web.Routing.RouteValueDictionary { { "bti", bu.bti }, { "bop", bu.bop }, { "blo", bu.blo }, { "bzo", bu.bzo }, { "bpr", bu.bpr }, { "bha", bu.bha }, { "bor", bu.bor } });
}
这项工作对我来说还可以。
我的英语非常糟糕。遗憾
答案 3 :(得分:1)
您需要将方法GET添加到表单标记
@using (Html.BeginForm("MethodName", "YourController",FormMethod.Get))
{ ... }
然后您的Form标签将生成GET请求,表单中的所有参数将在URL查询字符串中。