我对同一页面有两种操作方法,一种使用 GET 进行初始加载,另一种使用 POST 提交表单,该表单应重定向到另一个页面。这两个调用都需要 url 中的一个强制参数,也可以从查询字符串中获取两个可选参数。
让我们调用可选参数oPar1
,并将oPar2
它们作为 GET 方法的参数以任意组合方式获取。这些被添加到页面使用的 ViewModel 中。
POST 需要为 action 方法提供参数,所以在action
form 标签的属性中我们有:
@Url.Action("PostAction", new { mPar = Model.mPar, oPar1 = Model.oPar1, oPar2 = Model.oPar2 })
不用说方法也设置为post
。
当我在 GET 中只提供两个可选参数之一时,问题就来了。当按下提交按钮时,似乎调用了 GET 方法而不是 POST。如果我提供了两个可选参数或根本不提供,那么 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 添加到组合之前,此设置一直有效。我在这里做的事情真的很愚蠢吗?