BeginForm()将复杂的输入值转换为路由

时间:2016-10-16 10:04:30

标签: c# asp.net-mvc

我在提交时将<input>值绑定到beginForm GET操作的路由中有一点问题。

首先,相关代码:

[Route("Company/{companyID:int}/MarketOffers/{PagingParam.PageNumber=1}")]
public ActionResult MarketOffers(int companyID, PagingParam pagingParam)

*这是我正在处理的行动声明。 PagingParam的属性PageNumber为int类型。

@using (Html.BeginForm(RouteDataHelper.ActionName, RouteDataHelper.ControllerName, FormMethod.Get, new { companyID = Model.Info.CompanyID }))

*在BeginForm中我只使用companyID,因为PageNumber会根据用户点击网站的内容而有所不同,因此在此处不提供。

<input id="PagingParam.PageNumber" name="PagingParam.PageNumber" type="hidden" value="1">

*这是输入哪个值应附加到URL。它在你上面看到的生成代码的形式里面。在提交表单之前,值会通过javascript更改。

当我输入链接时:

http://localhost:38120/Company/2037/MarketOffers/3

*一切都好。 PagingParam.PageNumber将其值设置为3.这是期望的行为。

但是当我使用PagingParam.PageNumber输入字段提交表单时,我的URL看起来像:

http://localhost:38120/Company/2037/MarketOffers?PagingParam.PageNumber=2

而不是

http://localhost:38120/Company/2037/MarketOffers/2

我确切地知道我可以使用javascript + JQuery处理它并更改表单操作值,但我感觉有一种方法可以在MVC中自动执行此操作而无需编写JavaScript。

所以问题是:当我传递表格时,我可以做一些事情来自动生成所需的链接吗(例如)“/ Company / 2037 / MarketOffers”并将PagingParam.PageNumber附加到生成的URL而不编写JavaScript?< / p>

1 个答案:

答案 0 :(得分:2)

生成GET的表单中的所有输入都将其值添加为查询字符串参数,因为浏览器不知道服务器上的路由。

如果不使用javascript修改表单的../Company/2037/MarketOffers/3属性,则无法生成action