@ Html.EditorFor () отображает DropDownList вместо CheckBox - PullRequest
9 голосов
/ 12 декабря 2011

Я новичок в WebForms и MVC 3, и у меня проблема с вспомогательным методом @Html.EditorFor().

У меня строго типизированное представление, представляющее данные из базы данных, и один из методов имеет тип bool?. Я бы хотел, чтобы это отображалось в виде флажка, но вместо этого оно отображается в виде выпадающего списка с параметрами «Не установлено», «Истина» и «Ложь».

Какой самый простой способ преобразовать это в обычный флажок?

Я понимаю, что я мог бы изменить тип данных на обычный старый bool, но я использую эту большую сущность EF, и мне кажется, что для этого просто необходимо заново создать весь класс. Я также понимаю, что потеряю возможность отслеживать состояние «не установлено», но для меня важнее установить простой флажок.

Ответы [ 2 ]

10 голосов
/ 12 декабря 2011

Вместо этого используйте вспомогательный метод-флажок, @ Html.CheckBoxFor ()

Он отображает выпадающий список, поскольку флажок не сможет предоставить значение "не установлено".

6 голосов
/ 12 декабря 2011

Как правило, ASP.NET MVC имеет несколько шаблонов по умолчанию (вы можете прочитать их здесь ).

Если хотите, вы можете добавить свой собственный EditorTemplate, и ASP.NET MVC будет использоватьэто вместо дефолта.Для этого вы должны поместить файл 'Boolean. {Your-view-engine-extension}' (например: 'Boolean.aspx') в ~ / Views / ControllerName / EditorTemplates / или ~ / Views / Shared / EditorTemplates / и переопределите его своими собственными функциями.

Вот редактор по умолчанию для Boolean, который может быть улучшен вами:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
    private List<SelectListItem> TriStateValues {
        get {
            return new List<SelectListItem> {
                new SelectListItem { Text = "Not Set", Value = String.Empty, Selected = !Value.HasValue },
                new SelectListItem { Text = "True", Value = "true", Selected = Value.HasValue && Value.Value },
                new SelectListItem { Text = "False", Value = "false", Selected = Value.HasValue && !Value.Value },
            };
        }
    }
    private bool? Value {
        get {
            if (ViewData.Model == null) {
                return null;
            }
            return Convert.ToBoolean(ViewData.Model, System.Globalization.CultureInfo.InvariantCulture);
        }
    }
</script>
<% if (ViewData.ModelMetadata.IsNullableValueType) { %>
    <%= Html.DropDownList("", TriStateValues, new { @class = "list-box tri-state" }) %>
<% } else { %>
    <%= Html.CheckBox("", Value ?? false, new { @class = "check-box" }) %>
<% } %>
...