Не могу увидеть информацию о моей записи в моем представлении

#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 не заполнен ничем полезным, то, похоже, у вас будет еще одна проблема, которую также нужно решить.)