我有一条复杂的路线,我想与 HtmlHelper.BeginForm 方法匹配。我已经阅读了很多关于使用路由值字典、对象初始化器和 html 属性的文章和答案。但他们都达不到我想要做的......
这是我要匹配的路线:
// Attempt to consolidate all Profile controller actions into one route
routes.MapRoute(
"Profile",
"{adminUserCode}/{controller}s/{customerId}/{action}/{profileId}",
new { adminUserCode = UrlParameter.Optional, controller = "Profile"},
new { adminUserCode = @"\d+", customerId = @"\d+", profileId = @"\d+" }
);
我想与之匹配的控制器和操作的示例 url 将是:
http://mysite.com/123/Profiles/456/UpdatePhoneNumber/789
实际电话号码在 POST 正文中
这是我最接近正确的语法:
@using (Html.BeginForm(
"UpdatePhoneNumber",
"Profile",
new {
customerId = Model.LeadProfile.CustomerId,
profileId = Model.CustomerLeadProfileId
}))
{
<!-- the form -->
}
但这会将对象中的参数作为查询字符串参数,如下所示:
<form method="post"
action="/mvc/123/Profiles/UpdatePhoneNumber?customerId=78293&profileId=1604750">
我只是一时兴起尝试了这种语法,但它输出的内容与其他重载相同
@using (Html.BeginForm(new
{
controller = "Profile",
customerId = Model.LeadProfile.CustomerId,
action = "UpdatePhoneNumber",
profileId = Model.CustomerLeadProfileId
}))
我知道我可以在这里使用原始 HTML,但似乎应该有一种方法可以让愚蠢的 HtmlHelper 匹配比最基本的路由更多的内容。