2015-09-23 2 views
3

Я новичок в ASP.NET MVC, и я пытаюсь разработать простое приложение для реализации CRUD-операций, но операция удаления имеет странную проблему при возврате к контроллеру , потому что он возвращает нулевой объект, не позволяя выполнить операцию. Ниже я покажу код для модели, контроллера и соответствующего представления.Удалить представление возвращает нулевой объект к контроллеру

Модель:

public class Biblioteca 
{ 
    public int IdBiblioteca { get; set; } 
    public string Nome { get; set; } 
    public string Endereco { get; set; } 
} 

Контроллер

public class BibliotecaController : Controller 
{ 
    ADAO dao = DAOFactory.GetInstance(DAOFactory.DAOType.Biblioteca); 

    [HttpGet] 
    public ActionResult DeleteLibrary(int id) 
    { 
     return View(dao.Select(id)); 
    } 

    [HttpPost] 
    public ActionResult DeleteLibrary(Biblioteca b) 
    { 
     dao.Delete(b); 
     return RedirectToAction("Index"); 
    } 
} 

Посмотреть DeleteLibrary

@model BibliotecaWebApp.Models.Biblioteca 

<h2>DeleteLibrary</h2> 
<h3>Are you sure you want to delete this?</h3> 
<div> 
    <h4>Biblioteca</h4> 
    <hr /> 
    <dl class="dl-horizontal"> 
     <dt>@Html.DisplayNameFor(model => model.IdBiblioteca)</dt> 
     <dd>@Html.DisplayFor(model => model.IdBiblioteca)</dd> 
     <dt>@Html.DisplayNameFor(model => model.Nome)</dt> 
     <dd>@Html.DisplayFor(model => model.Nome)</dd> 
     <dt>@Html.DisplayNameFor(model => model.Endereco)</dt> 
     <dd>@Html.DisplayFor(model => model.Endereco)</dd> 
    </dl> 

    @using (Html.BeginForm()) { 
     @Html.AntiForgeryToken() 
     <div class="form-actions no-color"> 
      <input type="submit" value="Delete" class="btn btn-default" /> | 
      @Html.ActionLink("Back to List", "Index") 
     </div> 
    } 
</div> 

Как мы можем видеть во фрагменте контроллера, есть два контроллера для каждой операции: а [HttpGet ], которые извлекают данные, которые будут отображаться в окне подтверждения, до того, как они могут быть удалены [HttpP ост]. Проблема возникает в [HttpPost] DeleteLibrary, как только она получает нулевой объект Biblioteca из представления, чтобы выполнить исключение. Ниже приведены две картинки, которые лучше подарки это:

[HttpGet] DeleteLibrary работает правильно:

enter image description here

Но когда пользователь нажимает на кнопку Delete, на [HttpPost] методом DeleteLibrary получении нулевой объект, как показано ниже:

enter image description here

Мой вопрос: Почему возвращение объекта становится нуль, когда он перешел к мнению? В чем проблема?

+0

Поскольку вы не генерируя никаких элементов управления формы для вашей модели, так что нет ничего ро назад. Но вы должны только оставлять свойство 'ID' в любом случае. –

+0

Привет, Стивен, я не понял, какая форма это, потому что в представлении, которое я показал, есть форма, которая понимает сообщение. Что ты имел в виду? Благодарю. –

+2

Форма возвращает только значения своих элементов управления ('input',' select' и 'textarea'). Вы не контролируете, поэтому ничего не нужно подавать (и не должно быть). Просто измените подпись метода POST на '[HttpPost] (public ActionResult DeleteLibrary (int id)' –

ответ

0

Используйте этот

**@using (Html.BeginForm()) { 
 
     @Html.AntiForgeryToken() 
 
     @Html.HiddenFor(m => m.IdBiblioteca) 
 
     <div class="form-actions no-color"> 
 
      <input type="submit" value="Delete" class="btn btn-default" /> | 
 
      @Html.ActionLink("Back to List", "Index") 
 
     </div> 
 
    }**

вместо этого

**@using (Html.BeginForm()) { 
 
     @Html.AntiForgeryToken() 
 
     <div class="form-actions no-color"> 
 
      <input type="submit" value="Delete" class="btn btn-default" /> | 
 
      @Html.ActionLink("Back to List", "Index") 
 
     </div> 
 
    }**

+0

Хотя этот блок кода может ответить на вопрос, было бы лучше если вы могли бы дать небольшое объяснение n, почему он это делает. Возможно, вы могли бы описать, что отличается от двух блоков, и почему эти изменения устраняют проблему. – Crispin

+0

из-за проблем с кешем на локальной машине некоторые данные, кажется, не ограничены правильно. Но, когда мы публикуем ценность внутри формы, представьте намеренно, она работает –

Смежные вопросы