Проблема заключается в том, что помощник Html.DropDownLisTFor использует модель страницы, а не текущий элемент строки. Есть ли способ обойти это?Могу ли я использовать DropDownListFor в WebGrid?
Это мой ViewModel:
public class DropTest
{
public IEnumerable<DropQuestion> DropQuestions { get; set; }
}
public class DropQuestion
{
public Int32? QuestionNo { get; set; }
public Int32? Status { get; set; }
public IEnumerable<SelectListItem> IStatuses { get; set; }
}
и это мнение я хочу:
@model Blah.ViewModels.DropTest
@{
var DGrid = new WebGrid(Model.DropQuestions);
}
@DGrid.GetHtml(
columns: DGrid.Columns(
DGrid.Column("QuestionNo", "Question No"),
//I need this to work picking up the correct status for the current row??
DGrid.Column("Status", "StatusFor",
format: @<text>
@Html.DropDownListFor(x => x.Status, Model.IStatuses)
` </text>),
)))
я могу использовать DropDownList, но это не правильно назначить "Selected"
Спасибо заранее за любые советы.
Проблема была устранена путем добавления временного типа к модели и определения ее значения статуса в другом столбце. Это можно было бы улучшить, выполнив всю работу в одном столбце, я не мог понять, как без ошибок? Моего ViewmModel теперь имел эту поправку:
public class DropTest
{
public IEnumerable<DropQuestion> DropQuestions { get; set; }
public Int32 GridStatus { get; set; }
}
и вид:
DGrid.Column("QuestionNo", "Question No",
format: ((item) => { Model.GridStatus = item.Status ?? 0; return item.QuestionNo; })),
DGrid.Column("Status", "StatusFor",
format: @<text>
@Html.DropDownListFor(x => x.GridStatus, Model.IStatuses)
</text>),
Надеется, что это помогает кому-то или даже может быть улучшено до совершенства кто-то другим!
Я нашел это, выполнив поиск. У меня нет времени, чтобы попробовать, но, возможно, это поможет вам: http://www.seanrowland.com/?p=69 – Splendor
Спасибо @Splendor :-) В основном я добавил новую временную переменную модели называется GridStatus и использовать это вместо статуса. В любом столбце в сетке он должен быть назначен item.Status. – AntBoots