Работа со списками в режиме Razor View — неправильный цикл

#c# #asp.net-mvc #razor #foreach #html.hiddenfor

#c# #asp.net-mvc #razor #foreach #html.hiddenfor

Вопрос:

Я боролся с получением списка, возвращаемого на моей странице просмотра Razor. Я передаю данные своему контроллеру, который подключается к моей службе для извлечения данных для меня. Это работает без проблем.

Однако, когда я передаю его на свою страницу просмотра Razor, возникает проблема с объектами. В итоге я выполнил цикл foreach, но есть определенные свойства объекта, которые не следует рассматривать как список. Когда я пытаюсь использовать «@Html.HiddenFor (m => m.State) » это больше не работает, и мой результат — просто беспорядок циклов на странице. Здесь я впервые работаю со списками и надеялся, что кто-нибудь сможет подсказать способ, с помощью которого я могу выполнить цикл foreach в некоторых областях, где мне это нужно, а затем получить FirstOrDefault или что-то в этом роде для свойств, которые я не хочу повторять, поскольку они являются всего лишь индикаторами (например, isEmail = 1, например).

[ Контроллер]

 [HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetFilters(MembershipVM model)
{                         
    var results = _service.GetFilters(model).ToArray().ToList();
    model.EmailCount = results.Count();

    if (model.EmailCount == 0)
    {
        TempData["ReturnType"] = "Failure";
        TempData["ReturnMessage"] = "No Members were found using the search criteria entered.";
        return RedirectToAction("Index", model);
    }
    else
    {
        return View("SendEmail", results); // passes list to Razor View
    }
}
  

[ Просмотр]

 @using Otan.Models.Members
@using Otan.Web.Helpers
@model List<MembershipVM>

....
<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="bold panel-title">Filters Selected</h3>
    </div>
    <div class="panel-body">
        <ul>
            @if (Model.Zip.ToString() != 0)  @* I get an error here and with every other object in the model *@
            {
                @:<li>By proximity to ZIP Code: within <b>@Model.Distance</b> miles of Zip Code <b>@Model.Zip</b></li>
            }
....
            @Html.HiddenFor(m => m.State)  @* this does not work either unless I include a foreach loop *@
....
  

TIA

— Daisy

Ответ №1:

Попробуйте этот код, который вы можете использовать Html.HiddenFor , не включая его в цикл для каждого

 @Html.HiddenFor(m=> Model.FirstOrDefault().State)
  

что касается if statement , вы можете использовать его таким же образом, как это

 @if(Model.FirstOrDefault().Zip != 0)
  

Комментарии:

1. Ответы, содержащие только код, в Stack Overflow не приветствуются, поскольку они не объясняют, как это решает проблему. Пожалуйста, отредактируйте свой ответ, чтобы объяснить, что делает этот код и как он отвечает на вопрос, чтобы он был полезен OP, а также другим пользователям с подобными проблемами.

2. Я согласен с вами @FluffyKitten, но проблема в вопросе заключалась только в одной конкретной строке кода, которая не сработала.

3. Это может быть всего одна строка, но это не значит, что вы не можете объяснить свой код. Пожалуйста, отредактируйте вопрос, чтобы объяснить, что он делает и как он устраняет проблему в вопросе.