9

私は WebForms から MVC 3 に不慣れで、@Html.EditorFor()ヘルパー メソッドに問題があります。

データベースからのデータを表す厳密に型指定されたビューがあり、メソッドの 1 つは型bool?です。これをチェックボックスとして表示したいのですが、代わりに「未設定」、「True」、「False」のオプションを持つドロップダウンリストとして表示されます。

これを通常のチェックボックスに変換する最も簡単な方法は何ですか?

データ型を単純な古い に変更できることは理解していますboolが、これは私が使用している大きな EF エンティティであり、このためだけにクラス全体を再作成する必要があるのは面倒です。また、「設定されていない」状態を追跡する機能が失われることも認識していますが、単純なチェックボックスを表示することは私にとってより重要です.

4

2 に答える 2

10

代わりに、チェックボックス ヘルパー メソッド @Html.CheckBoxFor() を使用してください。

チェックボックスが「設定されていません」という値を提供できないため、ドロップダウンリストをレンダリングしています。

于 2011-12-12T16:01:19.947 に答える
6

基本的に、ASP.NET MVCにはいくつかのデフォルトテンプレートがあります(ここで読むことができます)。

必要に応じて、独自のEditorTemplateを追加すると、ASP.NETMVCがデフォルトの代わりにそれを使用します。このためには、ファイル'Boolean。{your-view-engine-extension}'(例:'Boolean.aspx')を〜/ Views / ControllerName / EditorTemplates /または〜/ Views / Shared /EditorTemplates/のいずれかに配置する必要があります。独自の機能でオーバーライドします。

ブール値のデフォルトのエディタは次のとおりです。これは、次のように拡張できます。

<%@ 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" }) %>
<% } %>
于 2011-12-12T16:14:09.290 に答える