В некоторых случаях я хочу отображать объект 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; }
}
Окончательный результат выглядит следующим образом:
Моя модель просмотра выглядит так (упрощенно):
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
будет лучше. - person   schedule 01.05.2017