同じページに 2 つのアクション メソッドがあります。1 つは初期ロードに GET を使用し、もう 1 つは別のページにリダイレクトする必要があるフォーム送信に POST を使用します。どちらの呼び出しでも、URL に 1 つの必須パラメータが必要であり、クエリ文字列から 2 つのオプション パラメータを取得することもできます。
オプションのパラメーターoPar1
を呼び出してoPar2
、GET メソッドのパラメーターとして取得されるものは、どのような組み合わせでも問題ありません。これらは、ページで使用される ViewModel に追加されます。
POST はアクション メソッドにパラメーターを提供する必要があるためaction
、フォーム タグの属性には次のように記述します。
@Url.Action("PostAction", new { mPar = Model.mPar, oPar1 = Model.oPar1, oPar2 = Model.oPar2 })
言うまでもなく、メソッドも に設定されていpost
ます。
問題は、GET で 2 つのオプション パラメータのうち 1 つだけを指定したときに発生します。送信ボタンが押されると、POST ではなく GET メソッドが呼び出されるようです。オプションのパラメーターを両方指定するか、まったく指定しない場合、POST は正常に呼び出され、期待どおりにパラメーターが取得されます。
関数宣言は次のとおりです。
[HttpGet]
[RequireHttps]
public ActionResult GetAction(string mPar, string oPar1, string oPar2)
と
[HttpPost]
[RequireHttps]
public ActionResult PostAction(string mPar, MyModel model, string oPar1, string oPar2)
ルートは次のとおりです。
routes.MapRoute(
"GetActionRoute",
"mycontroller/{mPar}/pageName",
new { controller = "myController", action = "GetAction", mPar = UrlParameter.Optional },
new { httpMethod = new HttpMethodConstraint("GET") });
routes.MapRoute(
"PostActionRoute",
"mycontroller/{mPar}/pageName",
new { controller = "myController", action = "PostAction", mPar = UrlParameter.Optional },
new { httpMethod = new HttpMethodConstraint("POST") });
oPar2 をミックスに追加するまで、このセットアップが機能していたことを付け加えておく価値があります。私はここで本当にばかげたことをしていますか?