1

私の質問: ビュー モデル内にInterfaceDisplay、インターフェイス エントリ フォームを設定するためのいくつかの表示プロパティとその他のメタ データを格納するクラスを作成しました。

additionalViewData オブジェクトを使用してカスタム ID を設定すると、なぜだろうと思っています。@Html.EditorFor(item => item.Interface.DependantSystem, new { @id = "ls" })私のコントロール ID はまだ自動生成に設定されていid="Interface_DependantSystem"ますか? ViewModel から直接プロパティの ID を上書きしましたが、それらがオブジェクト内のプロパティである場合はダイスはありません。

私のビューモデル:

public class ApplicationViewModel
{
    //Other Properties

    public class InterfaceDisplay {
        [DisplayName("Linked System")]
        public string DependantSystem { get; set; }

        [DisplayName("Data Flow")]
        public string DataFlow { get; set; }

        [DisplayName("Method")]
        public string Type { get; set; }

        [DisplayName("Name")]
        public string Name { get; set; }

        [DisplayName("Description")]
        [DataType(DataType.MultilineText)]
        public string Description { get; set; }
    }
}

私の見解

@model Namespaces.ApplicationViewModel
<table class="content-table">
        <tr>
            <td style="width: 240px;">
                @Html.Hidden("appid", @Model.Id)

                @Html.LabelFor(item => item.Interface.DependantSystem)
                @Html.EditorFor(item => item.Interface.DependantSystem, new { @id = "ls" })

                @Html.LabelFor(item => item.Interface.DataFlow)
                @Html.EditorFor(item => item.Interface.DataFlow, new { @id = "df" })

                @Html.LabelFor(item => item.Interface.Type)
                @Html.EditorFor(item => item.Interface.Type, new { @id = "mt" })

                @Html.LabelFor(item => item.Interface.Name)
                @Html.EditorFor(item => item.Interface.Name, new { @id = "nm" })

                @Html.LabelFor(item => item.Interface.Description)
                @Html.EditorFor(item => item.Interface.Description, new { @id = "de" })
            </td>
        </tr>
</table>
4

1 に答える 1

2

ヘルパーに渡す 2 番目の引数はEditorFor、対応するエディター テンプレートの追加のビュー データを定義します。ただし、カスタム エディター テンプレートを作成しない場合は、default templateが使用されます。前の文でリンクしたブログ投稿からわかるように、この既定のテンプレートは、渡された追加のビュー データ プロパティ引数に対してはまったく何もしません。

したがって、このパラメーターに何らかの効果を持たせたい場合は、カスタム テンプレート (この場合はエディター テンプレート) を作成する必要があります。これは、EditorFor ヘルパーを使用しているためです。文字列型 ( ) のプロパティに適用するため、次の内容のDescriptionカスタム エディター テンプレートを追加できます。~/Views/Shared/EditorTemplates/string.cshtml

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    ViewData
)

EditorFor ヘルパーの 2 番目の引数としてビューで作成した匿名オブジェクトが、このテンプレートが対応する入力フィールドの HTML 属性になるように、デフォルトのテンプレートをオーバーライドし、ViewData を 3 番目の引数として TextBox ヘルパーに渡したことに注目してください。生成。

を使用するたびに文字列型の既定のエディター テンプレートをオーバーライドしたため、既定のテンプレートのHtml.EditorFor(x => x.SomePropertyOfTypeString, new { @class = "foo", id = "bar" })代わりにこのカスタム テンプレートが使用され、次のマークアップが生成されます。

<input class="foo" id="bar" name="Description" type="text" value="some value" />
于 2013-01-11T22:02:19.170 に答える