2

MVC 5 アプリケーションのカスタム表示テンプレートに問題があります。再利用したい複合型を含むビューモデルがあります。DisplayTemplates フォルダーを作成し、正しい命名規則に従って部分ビューを配置しました。すべてが正しく機能しているように見え、部分ビューが呼び出されますが、ブラウザには何も表示されません。

レンダリングされた html をチェックして、非表示になったり、おかしく表示されたりしていないことを確認しましたが、html 出力には文字通り何もレンダリングされていません。関連するスクリーンショットについては、以下を参照してください。私は何を間違っていますか?ありがとう。

フォルダ構造

プロジェクト構造

これが最初のビューです。ビューモデルには AvailableOption のリストがあります。foreach は displayfor を呼び出します

@model CustomerWebPortal.ViewModels.OrderVehicle

@using (Html.BeginForm("CreateOrder", "Home"))
{
    <h2>@Html.DisplayFor(x => x.DisplayName)</h2>

    <div class="description">
        <ul>
            @Html.Raw(Model.Description)
        </ul>
    </div>

    <h3>Available Options</h3>
    <hr />

    <div>
        @foreach (var option in Model.AvailableOptions)
        {
            Html.DisplayFor(x => option, "AvailableOption");
        }
    </div>

    <h3>Customer</h3>
    <hr />
    
    <div class="customerInfo">
        @Html.LabelFor(x => x.Customer)
        @Html.TextBoxFor(x => x.Customer)
        @Html.ValidationMessageFor(x => x.Customer)
    </div>

    <div class="actions">
        <input type="submit" value="Place Order" />
    </div>

    @Html.HiddenFor(x => x.VehicleId)
    @Html.HiddenFor(x => x.Price)
}

複合型の部分図を次に示します。

@model CustomerWebPortal.ViewModels.AvailableOption

<div class="row-fluid padtopbottom5">
    <div class="span6">
        <div class="row-fluid">
            <div class="span4">
                @Html.CheckBoxFor(x => x.Selected)
            </div>
        </div>
    </div>

    <div class="span6">
        <div class="row-fluid">
            <div class="span4">
                <h3>@Html.DisplayFor(x => x.DisplayName)</h3>

                <ul>
                    @Html.Raw(Model.Description)
                </ul>

                <p><strong>@Html.DisplayFor(x => x.Price)</strong></p>
            </div>
        </div>
    </div>
</div>

複合型の displayfor を呼び出す foreach は次のとおりです。

ここに画像の説明を入力

レンダリングされた HTML の結果は次のとおりです。

ここに画像の説明を入力

誰かが見たい場合は、エラーを再現する小さなテスト プロジェクトを作成しました。サンプルプロジェクト

4

2 に答える 2

2

これは質問のコメントにありますが、私は Html.Raw を使用して小さなテスト アプリを作成しました。明らかに、ケースも修正されるはずです。Html.DisplayFor の前に「@」が必要です。

ViewModel (私の場合はジャンク データ)

public class IndexViewModel
{
    private IEnumerable<string> _avlOpt;

    public IEnumerable<string> AvailableOptions
    {
        get { return _avlOpt; }
        set { _avlOpt = value; }
    }

    public IndexViewModel()
    {
        List<string> lstString = new List<string>();
        for (int i=1;i<5;i++)
        {
            lstString.Add(@"<h" + i.ToString() + ">Test</h" + i.ToString() + ">");
        }
        AvailableOptions = lstString;
    }
}

意見

 test<br/>
 @foreach (var option in Model.AvailableOptions)
 {
   @Html.Raw(option);
 }
<br/>end test

結果を表示 (ソース - "@" なし - Html.Raw(オプション))

<div>
test<br/>
<br/>end test
</div>

結果を表示 (ソース - WITH "@" - @Html.Raw(オプション))

<div>
test<br/>
<h1>Test</h1><h2>Test</h2><h3>Test</h3><h4>Test</h4>    <br/>end test
</div>
于 2016-02-01T18:45:22.070 に答える