1

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を最も基本的なルートよりも多く一致させる方法があるはずです。

4

1 に答える 1

1

フォームで複雑なルートを使用する場合は、 BeginRouteFormメソッドを使用する必要があります

@using (Html.BeginRouteForm("Profile", new
{
    controller = "Profile",
    customerId = Model.LeadProfile.CustomerId,
    action = "UpdatePhoneNumber",
    profileId = Model.CustomerLeadProfileId
}))
于 2013-01-24T06:19:27.440 に答える