0

フォームが読み込まれるエンティティに応じて、表示する必要がある場合とない場合があるいくつかのフォーム フィールドがあります。したがって、私のモデルでは、それに応じてブール値のプロパティが割り当てられています。

フォームの各フィールドには、対応する「ラベル」があります (html ラベルではありません)。次のコードは、html 入力要素を非表示にしますが、ラベル !?!? は非表示にしません。

<!-- DBA: _________________ -->
<tr>
    <td>
        @if (Model.DisplayDBAField)
        {
            @Html.Raw("DBA:")
        }
    </td>
    <td>
        @Html.TextBox("DoingBusinessAs", Model.DoingBusinessAs, new { style = string.Format("visibility: {0};", Model.DisplayDBAField ? "visible" : "hidden") })
    </td>
</tr>

ラベルと入力の両方を非表示にする目的の表示を取得するには、上記を次のように書き直す必要がありました。

<!-- DBA: _________________ -->
<tr>
    <td>
        @Html.Raw(Model.DisplayDBAField ? "DBA:" : "")
    </td>
    <td>
        @Html.TextBox("DoingBusinessAs", Model.DoingBusinessAs, new { style = string.Format("visibility: {0};", Model.DisplayDBAField ? "visible" : "hidden") })
    </td>
</tr>

何らかの理由で、コード ブロック [ @if (Model.DisplayDBAField){} ] が true と評価されることはありません。これは Razor のバグですか? Visual Studio のバグですか? Asp.Net バグ?

MilkyWayJoe のリクエストによると、コントローラーのコードは次のとおりです。

if (!string.IsNullOrEmpty(hiddenFields))
{
    profile.DisplayDBAField = !hiddenFields.Contains("DBA");
    profile.DisplayVendorIDField = !hiddenFields.Contains("VendorID");
    profile.DisplayContactNameFields = !hiddenFields.Contains("ContactName");
}

上記のコードは問題なく動作します。ステップ実行すると、フィールドが正しく設定/設定解除されます。モデルは次のとおりです。

public class ProfileModel
{
    public EntityProfile Entity { get; set; }
    public bool DisplayDBAField { get; set; }
    public bool DisplayVendorIDField { get; set; }
    public bool DisplayContactNameFields { get; set; }
    public bool DisplayDistributionMethodField { get; set; }
    public bool DisplayCardPurposeField { get; set; }

    public ProfileModel()
    {
        DisplayDBAField = true;
        DisplayVendorIDField = true;
        DisplayContactNameFields = true;
        DisplayDistributionMethodField = true;
        DisplayCardPurposeField = true;
    }
}

したがって、デフォルトのコンストラクターはフラグを true に設定し、コントローラーは適切な場合にフラグを変更します。ビューで次のことも試しました。

    <td>
        @if (!Model.DisplayDBAField)
        {
            @Html.Raw("DBA:")
        }
    </td>

そして、Model.DisplayDBAField の値に関係なく、それが true であるか false であるかに関係なく、「DBA:」は決してレンダリングされないことがわかりました。したがって、@if (Model.DisplayDBAField){} と @if (!Model.DisplayDBAField){} のどちらを使用しても、コード自体は実行時に完全に無視されるようです。

4

0 に答える 0