1

我使用 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

4

1 回答 1

1

您不应该需要查询字符串参数,因为它们存在于BidViewModel您的帖子中。POST 请求的要点是您没有查询字符串参数。

我认为您必须使用该方法的重载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>
}

现在它将使用 as post 值http:localhost/Tender/SubmitBid的属性发布到BidViewModel,其中包含IdBidId。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 
                });
于 2013-10-29T19:05:37.977 回答