MVC3 - пустая модель на столбе
У меня есть две модели - категория и статья. У меня есть почти одинаковые виды просмотров и контроллеры для обоих из них. Единственное отличие состоит в том, что он работает для категорий, но со статьями я получаю пустую модель на HttpPost.
Категории:
public ActionResult DeleteCat(int id)
{
Category cat = db.CategoryByID(id);
if (cat != null)
{
return View(cat);
}
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult DeleteCat(Category model)
{
db.DeleteCategory(model.CategoryID);
return RedirectToAction("Index");
}
Статьи:
public ActionResult Delete(int id)
{
Article art = db.ArticleByID(id);
if (art != null)
{
return View(art);
}
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult Delete(Article model)
{
db.DeleteArticle(model.ArticleID);
return RedirectToAction("Index");
}
Оба представления генерируются Visual Studio, и я не изменил их. Когда я хочу удалить категорию, все будет хорошо. Но когда я хочу удалить статью, она сначала правильно выбирается из базы данных, затем отображается представление (все в порядке), но когда я нажимаю кнопку удаления, модель пуста (все свойства равны 0, null или false) и поэтому db.DeleteArticle выдает исключение (нет статьи с ArticleID = 0). Может ли кто-нибудь указать мне какие-либо подсказки относительно того, что я должен проверить или как мне это сделать?
Ответы
Ответ 1
Есть два основных способа, которыми это может случиться.
Один из способов заключается в том, что у вас есть настраиваемая привязка модели, которая не работает. Я предполагаю, что вы делаете все готово, поэтому это не будет применяться.
Наиболее вероятной проблемой является то, что данные не получают POSTED. Убедитесь, что поля существуют внутри той же Формы, что кнопка "Удалить" является POSTING.
Ответ 2
Если параметр для модели в действии [HttpPost] является тем же именем, что и свойство в модели, оно будет равно null и не проверит проверку, поскольку поле было недопустимым.
Пример:
public class ContactMessage {
public string Name { get; set; }
public string sankdmfskm { get; set; }
}
[HttpPost]
public ActionResult Index(ContactMessage sankdmfskm)
{
...
}
sankdmfskm
будет null
.
Пробовал в MVC3 и MVC4.
Ответ 3
Была такая же проблема. Одно из моих свойств в модели было названо моделью
public String model { get; set; }
После переименования свойства в myModel. Объект модели прекратил возвращать нулевое значение в ActionResult
Ответ 4
Убедитесь, что ваша модель помечает свойства как свойства (если используется VB или С# с get/set), а не публичное поле... MVC не будет отображаться в общедоступном поле, но будет публичным.
Ответ 5
У меня была такая же проблема, как и вы. Я сделал в вашем случае
[HttpPost]
public ActionResult Index(ContactMessage sankdmfskm)
{
UpdateModel(sankdmfskm);
...
}
После обновления модели она вернула мне правильные значения и не больше нуля.