我使用AttributeRouting为ActionResult设置特定路由。我有这个配置时找不到404页面:
[GET("Tender/SubmitBid/{id}/{bidId}")]
public ActionResult SubmitBid(string id, string bidId)
{
...
return View(model);
}
@using ("SubmitBid", "Tender", new { id = Model.TenderId, bidId = Model.BidId }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
...
<button type="submit">Save</button>
}
// 404 not found
[HttpPost]
public ActionResult SubmitBid(BidViewModel model)
{
...
}
我安装了一个url嗅探器,看到url触发器找不到404页面,我得到了这个:http ... / Tender / SubmitBid / 1/0
它应该正常工作......但我必须删除最新的参数才能到达ActionResult,我不知道为什么。
感谢您的帮助,
卡琳
修改 如果我删除属性[GET(“Tender / SubmitBid / {id} / {bidId}”)],则可以访问POST请求的页面。但是网址就像http ... // Tender / SubmitBid / 1?bidId = 0
答案 0 :(得分:1)
您不应该需要查询字符串参数,因为它们存在于您发布的BidViewModel
中。 POST请求的要点是您没有查询字符串参数。
我认为您必须使用this overload方法的Html.BeginForm
:
@using (Html.BeginForm("SubmitBid", "Tender", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.BidId)
// Other properties..
<button type="submit">Save</button>
}
现在,它会以http:localhost/Tender/SubmitBid
的属性作为帖子值发布到BidViewModel
,其中包含Id
和BidId
。 POST操作的签名可以保持不变:
[HttpPost]
public ActionResult SubmitBid(BidViewModel model)
{
string id = model.Id;
string bidId = model.bidId;
// ...
}
AttributeRouting也可能导致此问题。你可以尝试使用本机ASP.NET MVC路由吗?您可以使用此特定路线提交出价:
routes.MapRoute(
name: "SubmitBid",
url: "Tender/SubmitBid/{id}/{bidId}/",
defaults: new
{
controller = "Tender",
action = "SubmitBid",
id = UrlParameter.Optional,
bidId = UrlParameter.Optional
});