1

私はモデルを持っています:

public class PostModel
{
    public int PostId { get; set; }

    [Required]
    [Display(Name = "Title")]
    public string Title { get; set; }

    [Required]
    [Display(Name = "Idea")]
    [DataType(DataType.MultilineText)]
    public string Body { get; set; }

    [Required]
    public int UserId { get; set; }

    public string UserName { get; set; }
}

でカスタム表示を作成しました/Shared/DisplayTemplates/PostModel.ascx。次に、これらのリストをHome/Indexビューに表示します。

@foreach (var p in Model.Popular)
{
    Html.DisplayFor(m => p);
}

ビューをステップスルーするときに にステップHtml.DisplayForインすると、 に入り、期待/Shared/DisplayTemplates/PostModel.ascxどおりに処理されます。ただし、実際にレンダリングされることはありません。

私は何を取りこぼしたか?

テンプレートは次のとおりです。

<%@ Control Language="C#"
    AutoEventWireup="true"
    CodeBehind="PostModel.ascx.cs"
    Inherits="System.Web.Mvc.ViewUserControl<TPB.Models.PostModel>" %>

<div class="rounded-border">
    <h2><%= Html.DisplayTextFor(m => m.Title) %></h2>
    <p><%= Html.DisplayTextFor(m => m.Body) %></p>
</div>
4

2 に答える 2

4

@Daiが近かった。これには Response.Write を使用しないでください。返された値をページにレンダリングする必要があることを Razor に伝えるには、前に @ 記号が必要です。

これはうまくいくはずです:

@foreach (var p in Model.Popular) {
    @Html.DisplayFor(m => p);
}

他のプロジェクトでの私のテストでは、IEnumerable のすべてのメンバー (リスト、配列など) を表示するだけであれば、実際にはループは必要ありません。

@Html.DisplayFor(m => m.Popular);

私のために働いています。

于 2013-10-02T04:15:12.607 に答える
0

DisplayForのインスタンスを返しますがMvcHtmlString、実際には応答ストリームに何も書き込みません。

あなたはこれが欲しいでしょう:

@foreach (var p in Model.Popular) {
    Response.Write( Html.DisplayFor(m => p) );
}
于 2013-10-02T04:09:36.603 に答える