【问题标题】:BeginForm() take complex input value into routingBeginForm() 将复杂的输入值带入路由
【发布时间】:2017-02-25 09:58:26
【问题描述】:

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

首先,相关代码:

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

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

@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 时,我可以做一些事情来自动生成所需的链接吗?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

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

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

    【讨论】:

    • 可惜了。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2017-10-25
    • 2011-01-03
    相关资源
    最近更新 更多