Почему объект передается в действие Удалить пустым? - PullRequest
0 голосов
/ 24 июня 2010

У меня есть базовое приложение ASP.NET MVC 2. У меня есть добавление и редактирование строк, работает нормально, но удаление не будет работать. Представление Delete получает правильную запись в GET, но при повторной публикации передаваемый параметр пуст, как в CategoryID = 0, все пустые значения. По этой причине не найдено ни одного объекта, удаляемого из базы данных, и создается исключение. Как получить правильную категорию для передачи в действие HttpPost Delete?

Вот что у меня в контроллере:

public ActionResult Delete(int id)
    {
        return View(_categoryRespository.Get(id));
    }

    [HttpPost]
    public ActionResult Delete(Category categoryToDelete)
    {
        try
        {
            _categoryRespository.Delete(categoryToDelete);
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

Это представление Удалить, которое, как я уже сказал, правильно отображает данные в GET:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MVCApp.Models.Category>" %>

<h2>Delete</h2>

<h3>Are you sure you want to delete this?</h3>
<fieldset>
    <legend>Fields</legend>

    <div class="display-label">CategoryID</div>
    <div class="display-field"><%: Model.CategoryID %></div>

    <div class="display-label">SectionName</div>
    <div class="display-field"><%: Model.SectionName %></div>

    <div class="display-label">CategoryName</div>
    <div class="display-field"><%: Model.CategoryName %></div>

    <div class="display-label">Content</div>
    <div class="display-field"><%: Model.Content %></div>

</fieldset>
<% using (Html.BeginForm()) { %>
    <p>
        <input type="submit" value="Delete" /> |
        <%: Html.ActionLink("Back to List", "Index") %>
    </p>
<% } %>

1 Ответ

0 голосов
/ 24 июня 2010

Ваша форма на самом деле не POST ничего.Вы можете добавить скрытый ввод с помощью CategoryID, а затем создать статический метод Delete в своем хранилище, который будет принимать CategoryID в качестве параметра (или создавать категорию с помощью CategoryID, а затем вызывать существующий метод Delete).

Контроллер

public ActionResult Delete(int id) 
{ 
    return View(_categoryRespository.Get(id)); 
} 

[HttpPost] 
public ActionResult Delete(int categoryID) 
{ 
    try 
    { 
        _categoryRespository.Delete(categoryID); 
        return RedirectToAction("Index"); 
    } 
    catch 
    { 
        return View(); 
    } 
} 

Просмотр

<h2>Delete</h2> 

<h3>Are you sure you want to delete this?</h3> 
<fieldset> 
    <legend>Fields</legend> 

    <div class="display-label">CategoryID</div> 
    <div class="display-field"><%: Model.CategoryID %></div> 

    <div class="display-label">SectionName</div> 
    <div class="display-field"><%: Model.SectionName %></div> 

    <div class="display-label">CategoryName</div> 
    <div class="display-field"><%: Model.CategoryName %></div> 

    <div class="display-label">Content</div> 
    <div class="display-field"><%: Model.Content %></div> 

</fieldset> 
<% using (Html.BeginForm()) { %> 
    <p> 
        <input type="hidden" name="categoryID" value="<%: Model.CategoryID %>" />
        <input type="submit" value="Delete" /> | 
        <%: Html.ActionLink("Back to List", "Index") %> 
    </p> 
<% } %> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...