MVC3 проблема маршрутизации HTTP 404 - PullRequest
0 голосов
/ 26 июля 2011

Я затрудняюсь понять, почему у меня есть Действия, которые возвращают 404 ошибки «Ресурс не найден». Имя контроллера: ItemManagementController Мое представление индекса имеет список элементов в таблице. Каждая строка содержит две ссылки: «Удалить» и «Запросить обновление». Ссылка Delete вызывает действие Delete и работает нормально. Обновление запроса выдает мне ошибку 404 и, похоже, пытается перейти к URL-адресу, например http://localhost/TVAPDev/ItemManagement/RequestUpdate?itemID=9.

Я должен предположить, что мне не хватает чего-то простого, поскольку они идентичны в том, что они делают с точки зрения вида. Действия, определенные в контроллере, похожи, за исключением того, что они вызывают разные методы на уровне службы, но это все.

Вот мои два действия контроллера.

[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.

Любая помощь здесь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Почему вы используете AjaxOptions на обычном Html.ActionLink (что такое Request Update)?

Может быть, вы хотели, чтобы это было так:

@Ajax.ActionLink(
    "Request Update", 
    "RequestUpdate", 
    new { 
        itemID = item.ItemID 
    }, 
    new AjaxOptions {
        HttpMethod = "POST",
        Confirm = "Request an Update to this item?",
        OnSuccess = "actionCompleted"
    }
)
1 голос
/ 26 июля 2011

Проверьте ваш код просмотра ... удаление использует помощник HTML Ajax, а обновление использует обычный помощник HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...