Можно ли использовать Lambda с моделью List‹ViewModel›?

Когда модель имеет тип List, как мы можем использовать с ней лямбду?

@model List<ViewModels.MyModel>

Это не работает для EditorFor

@Html.EditorFor(m=>m.FirstOrDefault().Value)

Как связать модель с EditorFor?


person Jude    schedule 06.03.2015    source источник


Ответы (2)


У вас есть итерация по нему и индексация, поскольку это коллекция:

@for(int i =0; i <Model.Count; i ++)
{
    @Html.EditorFor(m=> Model[i].Value)
}
person Ehsan Sajjad    schedule 06.03.2015
comment
Это сработало. Когда я проверяю элемент в браузере, я заметил, что идентификатор не был назначен элементу управления, а его имя — [0].Value. Как вы думаете, почему это произошло? - person Jude; 06.03.2015
comment
@ Джуд, о каком идентификаторе ты говоришь? - person Ehsan Sajjad; 06.03.2015
comment
идентификатор <input>, который был создан EditorFor. - person Jude; 06.03.2015
comment
@Jude, когда наша модель является коллекцией, имя должно быть проиндексировано, чтобы ее можно было опубликовать. - person Ehsan Sajjad; 06.03.2015
comment
@Jude, это то, как коллекция связывается с моделью, см.: haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx - person Ehsan Sajjad; 06.03.2015
comment
OK. Кстати, меня тоже интересует причина минусов. - person Jude; 06.03.2015
comment
@Jude Мне тоже интересно, а у тех, кто против, нет причин оставлять комментарии к моему сообщению :) - person Ehsan Sajjad; 06.03.2015

Полный пример ниже:

Код вашего контроллера:

public class ModelValue
{
   public int ID { get; set; }
   public string Name { get; set; }
} 

public class TestController : Controller
{
   public ActionResult Index()
   {
      List<ModelValue> model = new List<ModelValue>();
      for (int i = 0; i < 12; i++)
      {
         model.Add(new ModelValue { ID = i, Name = "Name " + i.ToString()  });
      }

      return View(model);
   }

   [HttpPost]
   public ActionResult Index(List<ModelValue> model)
   {
      return View(model);
   }
}

Ваш код просмотра:

@model List<MVCApp.Controllers.ModelValue>

@using (Html.BeginForm())
{
   for (int i = 0; i < Model.Count; i++)
   {
      @Html.EditorFor(modelitem => Model[i].ID)
      @Html.EditorFor(modelitem => Model[i].Name)
      <br />
   }
   <button type="submit">Go</button>
}
person Lucas Roselli    schedule 06.03.2015