#asp.net-mvc #razor #crud
#asp.net-mvc #razor #crud
Вопрос:
я пытаюсь удалить запись (это простой проект телефонной книги) и показать ее данные на странице подтверждения, но теперь это выглядит так
это мой домашний контроллер
#region [- Get -]
[HttpGet]
// [HttpDelete]
public ActionResult Delete(int? _id, Models.EF_Model.Phone_book _model)
{
return View();
}
#endregion
#region [- Post -]
[HttpPost]
//[HttpDelete]
public ActionResult Delete(Models.EF_Model.Phone_book _Model)
{
if (ModelState.IsValid)
{
Ref_ViewModel = new ViewModel.ViewModel();
Ref_ViewModel.Delete(_Model.Id);
}
else
{
ViewBag.Massage = "Choose a Contact";
}
return View(_Model);
}
#endregion
#endregion
это его представление
@model Phone_Book.Models.EF_Model.Phone_book
@{
ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<div>
<h4>Phone_book</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.First_Name)
</dt>
<dd>
@Html.DisplayFor(model => model.First_Name)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Last_Name)
</dt>
<dd>
@Html.DisplayFor(model => model.Last_Name)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Number)
</dt>
<dd>
@Html.DisplayFor(model => model.Number)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Email)
</dt>
<dd>
@Html.DisplayFor(model => model.Email)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Address)
</dt>
<dd>
@Html.DisplayFor(model => model.Address)
</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>
я пытался исправить это самостоятельно, но ничего не мог придумать
как я могу заполнить пробелы?
Ответ №1:
Проблема в том, что вы ничего не отправляете со своего контроллера в свое представление.
Вы должны найти свой контакт на основе вашего идентификатора. Как только это будет сделано, проверьте, не равно ли оно null, и отправьте его в свое представление.
[HttpGet]
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Phone_Book.Models.EF_Model.Phone_book contact = Context.Phone_book.Select(_id);
if (contact == null)
{
return HttpNotFound();
}
return View(contact);
}
Ответ №2:
Вы не отправляете экземпляр модели в представление:
public ActionResult Delete(int? _id, Models.EF_Model.Phone_book _model)
{
return View();
}
Так что нечего отображать. Обычно я бы не заподозрил, что это действие принимает экземпляр модели в качестве аргумента. Когда вы отлаживаете это, есть ли _model
экземпляр, который вы ищете? Если это так, передайте ее в представление:
return View(_model);
Если нет, вы можете использовать _id
для поиска модели из своего источника данных и передачи ее в представление:
var model = **query your DB here**;
return View(model);
(Если even _id
не заполнен ничем полезным, то, похоже, у вас будет еще одна проблема, которую также нужно решить.)