Html.BeginForm 带有路由 id 参数并在提交时获取参数?

Pho*_*_uy 5 c# asp.net-mvc razor asp.net-mvc-3

我的 mvc 项目中有一个这样的方法:

[Route("Categories/{categoryId}")]
public ActionResult List(SearchQueryCommand searchQuery) {
    //Stuff
    return View();

}
Run Code Online (Sandbox Code Playgroud)

所以这个方法被称为: '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>
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不知道如何格式化我的代码在我的网址是这样的:'www.myweb.com/Categories/213?Order=MinPrice'

我有哪些选择来执行此操作?

Pho*_*_uy 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> 
Run Code Online (Sandbox Code Playgroud)

这总是将我的表单操作设置为:{Categories}/{categoryId}并且因为是 a GET,所以Order将像我想要的那样设置为查询参数。