将路由值传递给Html.BeginForm

时间:2018-05-28 11:55:05

标签: asp.net-mvc

我希望表单将值从隐藏的输入传递到服务器,我还希望它将URL构建为 “本地主机:9392 /排行/索引/ 2 rankingType = someValue中&安培; ageGroup = someValue中&安培;周= 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 />              
                }

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

2 个答案:

答案 0 :(得分:0)

  

但它显示为“localhost:9392 / Ranking / Index / 2?rankingType = rankingTypeID&amp; ageGroup = ageGroupID&amp; 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上显示它们,这可能会让用户感到困惑(或者甚至可能对用户产生怀疑)。您也没有为这些隐藏的输入设置任何,除非您在此处未包含其他内容,这样做了吗?

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

答案 1 :(得分:0)

试试这段代码:

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

并在您的操作方法中,将其装饰为:

public ActionResult Index(string ageGroupID, string rankingTypeID, string week){}