0

いくつかのカスタムEditorTemplatesを実装しようとしていますが、それらは作成ビューによってのみレンダリングされており、編集ビューによってはレンダリングされていません。

モデル

public class Page {
    public int PageID { get; set; }
    [DataType(DataType.Html)]
    [AllowHtml]
    // I tried including [UIHint("Html")] but this made no difference
    public string Content { get; set; }
    ...
}

/Views/Shared/EditorTemplates/Html.cshtml

@model string
@Html.TextArea("", Model, new { @class = "html"})

/Views/Shared/EditorTemplates/Object.cshtml

@if (ViewData.TemplateInfo.TemplateDepth > 1)
{
    @ViewData.ModelMetadata.SimpleDisplayText

} else {

    @Html.ValidationSummary(false)

    foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit
                         && !ViewData.TemplateInfo.Visited(pm)))
    {
        if (prop.HideSurroundingHtml) {
            @Html.Editor(prop.PropertyName)
            @prop.DataTypeName
        } else {
            <div class="form-field">
                @if (!String.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString())) {
                    @Html.Label(prop.PropertyName)
                }
                @Html.Editor(prop.PropertyName)
            </div>
        }
    }
}

/Views/Page/Create.cshtml(これは正しくレンダリングされHtml.cshtmlます)

@model MvcDisplayTemplates.Models.Page

@using (Html.BeginForm()) {
    @Html.EditorForModel(Model)
    <p><input type="submit" value="Create" /></p>
}

/Views/Page/Edit.cshtml(これは単にデフォルトの1行のテキストエディタをレンダリングします)

@model MvcDisplayTemplates.Models.Page

@using (Html.BeginForm()) {
    @Html.EditorForModel(Model)
    <p><input type="submit" value="Save" /></p>
}

興味深いことに、私が使用するEditorForEdit.cshtmlHtml.cshtml実際にレンダリングされます。例えば

@Html.EditorFor(model => model.Content)

更新:削除するとobject.cshtmlHtml.cshtml正しくレンダリングされます。したがって、これはの問題のようですObject.cshtml。あるビューでは機能するが、別のビューでは機能しないのは奇妙に思えます

4

1 に答える 1

1

テンプレートを明示的に設定して修正しましたObject.cshtml

@Html.Editor(prop.PropertyName, prop.TemplateHint ?? prop.DataTypeName)

以前は一方のビューで機能したが、もう一方のビューでは機能しなかった理由はまだ明らかではありません。

于 2013-01-16T20:02:39.400 に答える