Asp.net mvc 将路由值传递给Html.BeginForm

Asp.net mvc 将路由值传递给Html.BeginForm,asp.net-mvc,Asp.net Mvc,我希望表单将隐藏输入中的值传递给服务器,我还希望它将URL构建为 “localhost:9392/Ranking/Index/2?rankingType=SOMEVALUE&ageGroup=SOMEVALUE&week=SOMEVALUE” 但它显示为“localhost:9392/Ranking/Index/2?rankingType=rankingTypeID&ageGroup=ageGroupID&week=week” @使用(Html.BeginForm(“Index”,“Rankin

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

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

@使用(Html.BeginForm(“Index”,“Ranking”,new{id=Model.CurrentRanking,rankingType=“rankingtypid”,ageGroup=“ageGroupID”,week=“week”},FormMethod.Post,new{id=“ageGroupForm”}))
{
}
为什么呢?如何传递值并使其显示为查询字符串

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

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

new { id = Model.CurrentRanking, rankingType = "rankingTypeID", ageGroup = "ageGroupID", week = "week"}
现在还不清楚您为什么要尝试为已有的确切表单输入设置查询字符串值:

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

尽管你这么做很奇怪。您的输入是隐藏的,这通常意味着您不想让用户担心它们。但是,您也在URL上显示它们,这可能会让用户感到困惑(甚至可能让用户感到可疑)。您也没有为这些隐藏的输入设置任何值,除非这里没有包含其他值,这是什么

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

请尝试以下代码:

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

只有在其
FormMethod.Get
(并且您可以从
BeginForm()
方法中删除路由值)的情况下,该值才会作为查询字符串值添加。但这有什么意义呢?它们是隐藏的输入,不是可编辑的值。谢谢,这澄清了很多!我不知道为什么我认为该方法应该是post。把它改成了get,现在它的效果非常好。谢谢
<input id="ageGroupID" name="ageGroup" hidden />
<input id="rankingTypeID" name="rankingType" hidden />
<input id="week" name="week" hidden />
@using (Html.BeginForm("Index", "Ranking", new { id = Model.CurrentRanking }, FormMethod.Get, new { id = "ageGroupForm" }))
@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){}