MVC3 Razor @if中是否有错误?

时间:2012-05-15 15:43:31

标签: asp.net-mvc-3 syntax razor

我有几个表单字段可能需要显示,也可能不需要显示,具体取决于加载表单的实体。所以在我的模型中,我有相应的布尔属性。

表单中的每个字段都有一个相应的“标签”(不是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 bug吗?,Visual Studio bug? Asp.Net bug?

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

因此默认构造函数将flags设置为true,并且控制器在适当时修改标志。我还在视图中尝试了以下内容:

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

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

0 个答案:

没有答案