Как получить Id по взаимодействию элемента, который является частью List <Element>в .NET Framework - PullRequest
0 голосов
/ 24 октября 2019

У меня есть список элементов, которые отображаются на странице в цикле for. Я хочу получить данные выбранного элемента в виде asp.net. Как я могу это понять?

Это действие контроллера, который возвращает список элементов:

public ActionResult MainContent()
{
    SiteContext db = new SiteContext();

    db.SaveChanges();
    var model = db.Posts.ToList();
    return PartialView("MainContent", model);
}

Частичное представление MainContent:

@model IEnumerable<LayersDAL.Entity.Post>

@for (int i = 0; i < Model.Count(); i++)
{
    <ul>
        <li>
            //Here is I'm trying to send element Id of current loop iteration to CurrentPost but something goes wrong :(
            <a class="post-ref" href="@Url.Action("CurrentPost", "Notes", new { Model.ToList()[i].PostId })">
                <h2>@Html.DisplayFor(modelItem => Model.ToList()[i].Title)</h2>
                <p>

                </p>
            </a>
        </li>
    </ul>
}

CurrentPostдействие:

    public ActionResult CurrentPost(int? id)
    {
        SiteContext db = new SiteContext();
        var post = db.Posts.FirstOrDefault(p => p.PostId == id);
        return PartialView(post);
    }

Частичное представление CurrentPost:

<div class="modal-post">

        <div class="modal-post-divs">

            <span class="close">&times;</span>
        </div>
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <div>
            <label>@Model.Title</label>
        </div>

</div> 

Список элементов в браузере

Ошибка изображения

Итак, что я могу сделать? :)

UPD:

Спасибо, ребята, я решил эту проблему:)

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Измените код ссылки на следующий:

            <a class="post-ref" href="@Url.Action("CurrentPost", "Notes", new { id =  Model[i].PostId })">
            <h2>@Html.DisplayFor(modelItem => Model[i].Title)</h2>
            <p>

            </p>
        </a>

Вы уже преобразовали его в список в вашем контроллере, поэтому вам не нужно вызывать ToList () для модели в представлении(и особенно не внутри для цикла!). Также убедитесь, что вы называете параметр, передаваемый методу CurrentPost (). В самом методе CurrentPost () вы должны дважды проверить, что параметр id является действительным и не нулевым, как показано ниже:

        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Post post = db.Posts.Find(id);
        if (post == null)
        {
            return HttpNotFound();
        }
0 голосов
/ 24 октября 2019

FirstOrDefault () возвращает значение NULL, если элемент не найден, поэтому ваша модель будет иметь значение NULL.

 public ActionResult CurrentPost(int? id)
 {
      SiteContext db = new SiteContext();
      var post = db.Posts.FirstOrDefault(p => p.PostId == id);
      return PartialView(post);
 }

Вы можете проверить его на своем виде, чтобы избежать ошибок.

@if(Model != null)
{
  // your code.
}
else
{
<p>No item found </p>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...