【问题标题】:MVC3 Routing problem HTTP 404MVC3 路由问题 HTTP 404
【发布时间】:2011-07-26 17:35:53
【问题描述】:

我不知道为什么我的操作会返回 404“找不到资源”错误。 控制器名称:ItemManagementController 我的索引视图具有表中的项目列表。每行包含两个链接,“删除”和“请求更新”。删除链接调用删除操作并且工作正常。请求更新给了我 404 错误,并且似乎试图导航到像 http://localhost/TVAPDev/ItemManagement/RequestUpdate?itemID=9 这样的 URL。

我不得不假设我遗漏了一些简单的东西,因为它们在视图方面的作用是相同的。控制器中定义的动作都相似,只是它们在服务层调用不同的方法,仅此而已。

这是我的两个控制器动作。

[AcceptVerbs(HttpVerbs.Post)]
public JsonResult Delete(int itemID) {
    var svc = new ItemManagementService(_repository);
    var requestModel = svc.GetItemDeleteModel(itemID);
    svc.DeleteItem(requestModel);
    var message = requestModel.ActionMessage;
    return Json(new { id = itemID, ChangeStatus = requestModel.ItemDetails.ItemChangeStatus.ToString(), ChangeType = requestModel.ItemDetails.ItemChangeType.ToString(), message});
     }


[AcceptVerbs(HttpVerbs.Post)]
public JsonResult RequestUpdate(int itemID) {
    var svc = new ItemManagementService(_repository);
    var requestModel = svc.GetItemUpdateRequestModel(itemID);
    svc.RequestItemUpdate(requestModel);
    var message = requestModel.ActionMessage;
    return Json(new { id = itemID, ChangeStatus = requestModel.ItemDetails.ItemChangeStatus.ToString(), ChangeType = requestModel.ItemDetails.ItemChangeType.ToString(), message });
    }

这里是视图中定义的链接

<td class="tblist" style="white-space: nowrap;">
    @Html.ActionLink("Request Update", "RequestUpdate", new { itemID = item.ItemID }, new AjaxOptions {
                                   HttpMethod = "POST",
                                   Confirm = "Request an Update to this item?",
                                   OnSuccess = "actionCompleted"
                                   })break;
    }
</td>
<td class="tblist" style="white-space: nowrap;">
    @Ajax.ActionLink("Delete", "Delete", new { itemID = item.ItemID }, new AjaxOptions {
   HttpMethod = "POST",
   Confirm = "Are you sure you want to delete this Item?",
   OnSuccess = "actionCompleted"
       })
</td>

同样,这里的删除没有问题。请求更新链接给了我 Http 404 错误。

这里的任何帮助将不胜感激。

【问题讨论】:

  • 我注意到其中一个调用使用 Ajax.ActionLink 而另一个使用 Html.ActionLink。这是你的意图吗?

标签: asp.net-mvc-3 routing


【解决方案1】:

你为什么在普通的Html.ActionLink 上使用AjaxOptions(这就是Request Update)?

也许你希望它是这样的:

@Ajax.ActionLink(
    "Request Update", 
    "RequestUpdate", 
    new { 
        itemID = item.ItemID 
    }, 
    new AjaxOptions {
        HttpMethod = "POST",
        Confirm = "Request an Update to this item?",
        OnSuccess = "actionCompleted"
    }
)

【讨论】:

  • 谢谢。我知道我错过了这样简单的东西,但我只是没有看到它。我还有 4 个其他链接我没有作为其中的一部分发布,但它们是 HTML 链接和 Ajax 链接的混合体,因此很难找到。再次感谢。
【解决方案2】:

检查您的查看代码...删除使用 Ajax html 帮助程序,更新使用常规 html 帮助程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多