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;
    }
}

所以默认构造函数将标志设置为真,控制器在适当时修改标志。我还在视图中尝试了以下操作:

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

并发现无论 Model.DisplayDBAField 中的值如何,无论是真还是假,“DBA:”都不会呈现!因此,无论我使用 @if (Model.DisplayDBAField){} 还是 @if (!Model.DisplayDBAField){},似乎代码本身在运行时都被完全忽略了。

4

0 回答 0