【发布时间】:2017-09-28 10:09:29
【问题描述】:
在某些情况下,我想显示 SelectList 对象而不使用 DropDownListFor 助手。相反,我想创建一个迭代 SelectListItems 的助手,并绘制不同的东西。
我创建了一个 EditorTemplate:
@model RadioButtonOptions
<div class=" switch-field noselect" style="padding-left: 0px;">
@foreach (SelectListItem op in Model.Values.Items)
{
var idLabelF = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "_" + op.Value;
var esChecked = "";
if (op.Selected)
{
esChecked = "checked";
}
<input type="radio" id="@idLabelF" name="@(ViewData.TemplateInfo.GetFullHtmlFieldName(""))" value="@op.Value" @esChecked />
<label for="@idLabelF" style="width: 100px;">@op.Text</label>
}
</div>
RadioButtonOptions 类是一个 ViewModel:
public class RadioButtonOptions
{
public SelectList Values { get; set; }
}
最终结果如下所示:
我的 ViewModel 是这样的(简化版):
public class MainVisitVM
{
public MainVisit Visit { get; set; }
public RadioButtonOptions VisitOptions { get; set; }
}
我在 Razor View 中将其用作:
<div class="clearfix">
@Html.LabelFor(x=> x.Visit.Tipo)
<div class="input">
@Html.EditorFor(x=> x.VisitOptions ) //HERE
</div>
</div>
我的问题是我希望它更像 DropDownListFor 那样工作,所以我传递的 lamda 表达式是保存所选值的属性,然后只传递 SelectList 对象(或自定义列表)。
<div class="clearfix">
@Html.LabelFor(x=> x.Visit.Tipo)
<div class="input">
@Html.CustomDropDownListFor(x=> x.Visit.Tipo, Model.VisitOptions ) //This would be ideal!!
</div>
</div>
所以,我认为使用 EditorTemplates 是不可能的。 任何想法如何做到这一点?
【问题讨论】:
-
这是可能的 - 通过将列表传递为
additionalViewData并使用(比如)var List = ViewData["...."];在模板中获取它,但HtmlHelper扩展方法会更好。 -
@StephenMuecke 我会尝试 HtmlHelper 扩展方法...谢谢!
标签: asp.net-mvc html-helper mvc-editor-templates