пытается создать MVC EditorTemplate для Bool, который отображает DDL с True или False - PullRequest
0 голосов
/ 27 октября 2010

Я делаю MVC EditorTemplate для типа данных bool, который будет отображать раскрывающийся список с параметрами True или False, И установить для выбранного значения значение Model.

DDL рендерится, но для него не установлено значение модели.

Что мне здесь не хватает?

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

<%:Html.EditorFor(model => model.Association.Active, "Bool")%>

Вот мой код шаблона:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<bool>" %>
<%
    string[] values = new string[2];
    values[0] = "True";
    values[1] = "False";
 %>
<div class="editor-row">
<div class="editor-label">
    <%= Html.LabelFor(model => model)%>
</div>
<div class="editor-field">
    <%= Html.DropDownListFor(model => model, new SelectList(values, Model))%>
    <%= Html.ValidationMessageFor(model => model) %>
</div>
</div>

Я немного украсил код, так что я использую REAL SelectListItems вместо строк. Но это все еще не работает. Теперь я получаю DDL из двух строк, которые говорят «System.Web.MVC.SelectListItem» вместо «true» и «false». Почему это происходит здесь?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<bool>" %>
<%
    SelectListItem item1 = new SelectListItem();
    item1.Text = "True";
    item1.Value = "True";

    SelectListItem item2 = new SelectListItem();
    item2.Text = "False";
    item2.Value = "False";

    if (Model == true)
    {
        item1.Selected = true;
        item2.Selected = false;
    }
    else
    {
        item1.Selected = false;
        item2.Selected = true;
    }

    List<SelectListItem> items = new List<SelectListItem>();
    items.Add(item1);
    items.Add(item2);
 %>
<div class="editor-row">
<div class="editor-label">
    <%= Html.LabelFor(model => model)%>
</div>
<div class="editor-field">
    <%= Html.DropDownListFor(model => model, new SelectList(items))%>
    <%= Html.ValidationMessageFor(model => model) %>
</div>
</div>

Ответы [ 3 ]

1 голос
/ 30 мая 2011

Итак, наконец-то код сработал:

public List<SelectListItem> YesNo()         
{

         SelectListItem item1 = new SelectListItem();
         item1.Text = "Yes";
         item1.Value = "True";
         SelectListItem item2 = new SelectListItem();
         item2.Text = "No";
         item2.Value = "False";
         List<SelectListItem> items = new List<SelectListItem>();
         items.Add(item1);
         items.Add(item2);
         return items;
}

В представлении:

 @Html.DropDownListFor(model => model.CustomerAccess,new SelectList(
                        new OrderProgression.Model.CommonList().YesNo(),
                        "Value","Text",Model.CustomerAccess.ToString()))
0 голосов
/ 27 октября 2010

Blackcoil - вы пытались настроить 1-ую строку на:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean?>" %>

, вероятно, не поможет, но именно так определяется мой EditorTemplate для пользовательского флажка, так как я ожидаю обнуляемые типы.

0 голосов
/ 27 октября 2010

Проблема заключается в том, что параметр конструктора SelectValue SelectList ищет точный экземпляр object selectedValue в коллекции значений, переданной ему.В вашем случае вы передаете string[] в качестве установленного значения и Boolean в качестве выбранного объекта, а поскольку (bool)true != (string)"True" соответствующий элемент не найден.

Вместо этого сделайте следующее:

<%= Html.DropDownListFor(model => model, new SelectList(values, Model.ToString()))%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...