@if (item.UserId == User.Identity.GetUserId().AsInt())
{
using (Html.BeginForm("Delete", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => item.Id)
<input type="submit" value="Delete" />
}
}
Вот сам вид в html view
[HttpPost]
[Authorize]
public ActionResult Delete(int Id)
{
var session = NHibernateHelper.GetCurrentSession();
try
{
using (var transaction = session.BeginTransaction())
{
DBNewsItem newItem = new DBNewsItem();
newItem.Id = Id;
session.Delete(newItem);
transaction.Commit();
}
}
finally
{
NHibernateHelper.CloseSession();
}
return RedirectToAction("Index", "Home");
}
А вот контроллер, который должен принимать id. Почему ему ничего не приходит?
В случаях, если
XXXFor
не для свойства модели, а для какого-то стороннего объектаPartialFor
или какой-то еще способ рендеринга сложного темплйта для поля.... MVC выставляет ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix
- в зависимости от имени переменной или от имени свойства в родительской модели.
Делается это для того, чтобы поля для разных Partial Views получили гарантированно разные имена в HTML.
Поэтому в HTML вы получаете не "id"
, а какой-нибудь "item_id"
.
Для того, чтобы сбайндить на сервере этот "item_id"
в параметр id
нужно посмотреть, какой префикс используется, и вписать его на сервере в виде атрибута параметра контроллера:
Для сложных типов достаточно вписать сам префикс (имя свойства байндер вытянет сам). Для простых - придется вписать полное имя параметра:
public ActionResult Delete([Bind(Prefix = "item.id")] int Id)
{
...
}
Или принимать "модель целиком" (достаточно бессмысленно в вашем слуае) - тогда байндер вытянет данные по имени параметра + имени свойства:
public ActionResult Delete(SomeItem item) // забайндит item.Id
{
...
}
Это же применимо и к случаю, когда "приходит вся модель", но с общим префиксом - Bind(Prefix = "item")
точно так же срабатывает в случае, если в partial была, например, отрендерена форма редактирования для нескольких полей.
Но именно в вашем случае - решение с @Html.Hidden("Id", item.Id)
надежнее и проще.
Переделал вьюшку под
@Html.Hidden("Id", item.Id)
Потом передал через пост в контроллер
public ActionResult Delete(int id){...}
На прямую, через имя, обращаюсь Item.Id
Наверное в метод приходит вся модель, попробуйте принимать её в метод.
Т.е. ваше определение метода, будет выглядеть следующим образом (если тип модели DBNewsItem)
public ActionResult Delete(DBNewsItem model)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
После выполнения метода Clientmain выбрасывается исключение ObjectDisposedException (Доступ к ликвидированному объекту невозможен)
Пытаясь посчитать сумму чисел заметил следующее поведение: 07 + 0
Всем приветСразу хочу сообщить-оправдаться, что только начинаю разбираться в веб-разработке