обрабатывать лямбду для @ HTML.Label - PullRequest
1 голос
/ 29 ноября 2011

Я имею более сильный типизированный тип моего класса с именем Cliente, определенный как

public partial class Cliente
{
    public Cliente()
    {
        this.Campana = new HashSet<Campana>();
    }

    public short IdCliente { get; set; }
    public short IdDireccion { get; set; }
    public string Descripcion { get; set; }
    public bool Activo { get; set; }

    public virtual ICollection<Campana> Campana { get; set; }
    public virtual Direccion Direccion { get; set; }
}

Я хочу добавить элементы класса Campana, поэтому я перешел в свою сумку вида вот так

 ViewBag.Campanas = db.Campana;

Теперь я хочу знать, как я могу сделать лямбда-выражение для создания меток и полей на основе класса. Я пытался так, но это не работает

  @foreach (var item in ViewBag.Campanas)
  {
      @Html.LabelFor (modelItem => item.Descripcion)
  }

Вот класс Кампана

public partial class Campana
{
    public Campana()
    {
        this.Servicio = new HashSet<Servicio>();
    }

    public short IdCampana { get; set; }
    public short IdCliente { get; set; }
    public string Descripcion { get; set; }
    public bool Activo { get; set; }

    public virtual Cliente Cliente { get; set; }
    public virtual ICollection<Servicio> Servicio { get; set; }
}

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Теперь я хочу знать, как я могу сделать лямбда-выражение для создавать метки и поля на основе класса

Вы можете полностью забыть о лямбдах и строгой типизации, если используете эту хрень ViewBag / ViewData. Нет шансов. ViewBag - это динамическое разрешение, которое не обеспечивает безопасность типов во время компиляции.

Я бы порекомендовал вам использовать модели представлений и заставить ваши действия контроллера передавать определенные типы моделей представлений вашим представлениям. Просто забудьте о существовании ViewBag. Это сделает ваш код строго типизированным и безопасным во время компиляции.

В интернете так много статей и руководств, обучающих людей этому раку ViewBag. Я действительно устал от этого. Пожалуйста, никогда не используйте его в своих приложениях.

  1. Определение вида моделей.
  2. Сделайте так, чтобы действия вашего контроллера передавали эти модели представлений представлениям.
  3. Сильно введите ваши взгляды (@model MyViewModel)
  4. Используйте строго типизированные помощники с лямбда-выражениями и соблюдайте безопасность времени в ваших представлениях.

Вывод: только после того, как вы полностью удалили все следы ViewBag / ViewData из своего приложения, мы можем говорить о лямбдах и строгой типизации в ваших представлениях.

1 голос
/ 29 ноября 2011

Причина, по которой вы получаете эту ошибку, заключается в том, что вы не можете использовать лямбда-выражения для dynamic ссылок. (т. е. ViewBag) Итак, вы сказали что-то о строго типизированных представлениях, но на самом деле ваше представление не является строго типизированным. Для этого вы используете директиву @model. Вы можете объявить свою модель следующим образом:

@model Table<Campana>

Тогда вместо использования ViewBag.Campanas вы можете использовать Model. Или вы можете просто передать весь контекст данных (db), если хотите. Однако это не очень хорошая практика. Лучше создать отдельные «модели представлений» для ваших представлений и преобразовать ваши объекты linq-to-sql в ваши модели представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...