我的问题似乎是Html.DropDownLisTFor助手使用的是页面模型,而不是当前的行项目。有办法解决这个问题吗?
这是我的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”
提前感谢任何建议。
我的问题是通过向模型添加临时类型并在另一列中为其指定Status值来解决的。通过在一列中完成所有工作可以改善这一点,我无法弄清楚如何不出错? 我的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>),
希望这可以帮助某人或者甚至可以被别人改进到完美!
答案 0 :(得分:1)
基本上我在名为GridStatus的模型中添加了一个新的临时变量,并使用它而不是Status。在网格中的任何列中,必须将其分配给item.Status