首页 > 解决方案 > 将路由值传递给 Html.BeginForm

问题描述

我希望表单将隐藏输入中的值传递给服务器,并且我还希望它将 URL 构建为“localhost:9392/Ranking/Index/2?rankingType=SOMEVALUE&ageGroup=SOMEVALUE&week=SOMEVALUE”

但它显示为“localhost:9392/Ranking/Index/2?rankingType=rankingTypeID&ageGroup=ageGroupID&week=week”

@using (Html.BeginForm("Index", "Ranking", new { id = Model.CurrentRanking, rankingType = "rankingTypeID", ageGroup = "ageGroupID", week = "week"}, FormMethod.Post, new { id = "ageGroupForm" }))
                {
                <input id="ageGroupID" name="ageGroup" hidden />
                <input id="rankingTypeID" name="rankingType" hidden />
                <input id="week" name="week" hidden />              
                }

这是为什么 ?如何传递值并让它们显示为查询字符串?

标签: asp.net-mvc

解决方案


但它显示为“localhost:9392/Ranking/Index/2?rankingType=rankingTypeID&ageGroup=ageGroupID&week=week”

那是因为这些正是您正在使用的字符串值:

new { id = Model.CurrentRanking, rankingType = "rankingTypeID", ageGroup = "ageGroupID", week = "week"}

目前还不清楚为什么您要尝试为您已经拥有的确切表单输入设置查询字符串值:

<input id="ageGroupID" name="ageGroup" hidden />
<input id="rankingTypeID" name="rankingType" hidden />
<input id="week" name="week" hidden />

如果您要完成的是将这些值放在查询字符串中(作为 GET 请求)而不是在请求正文中(作为 POST 请求),那么您所要做的就是将您的表单方法更改为 GET :

@using (Html.BeginForm("Index", "Ranking", new { id = Model.CurrentRanking }, FormMethod.Get, new { id = "ageGroupForm" }))

HTML 表单输入会自动添加到请求中,这就是表单的工作方式。您无需尝试手动操作。

虽然你这样做很奇怪。您的输入是隐藏的,这通常意味着您不想让用户关心它们。但是您也在 URL 上显示它们,这可能会让用户感到困惑(甚至可能让用户感到怀疑)。您也没有为那些隐藏的输入设置任何,除非您有其他未包含在此处的内容?

无论哪种方式,您的表单都会自动将其输入包含在提交的请求中。


推荐阅读