html.raw不起作用,调试代码与视图不匹配



在不使用内置验证的页面上工作。当我的代码中有以下行:

...
<tr class="@{ Html.Raw(Model.FieldsInError.Contains("FirstName") ? "" : "hidden"); }" id="valFirstName">
    <td colspan="2" class="text-danger">@Login.Error_FName</td>
</tr>
...

输出看起来像:

<tr class="" id="valFirstName">
     <td colspan="2" class="text-danger">@Login.Error_FName</td>
</tr>

不管我放在?:block中。尝试了?"猪油" ::"隐藏",这也失败了,总是呈现"。

我已经验证了模型。FieldSinError属性不是空的,并且具有有效的字符串。我尝试了标签和列表。

当我调试并浏览视图时,突出显示了错误的区域。

使用VS2013 SP5。

好的,所以它看起来像是剃须刀视图引擎中的一个错误。斯蒂芬(Stephen)从报价中违反逻辑的想法实际上是在起作用的。非常感谢。

因此,对于其他人看到的,只需将逻辑从类别中淘汰出来:

@{ var className = Model.FieldsInError.Contains("FirstName") ? "hidden" : null; } 
<tr class="@className" id="...">...</tr>

这将服务器上的逻辑留下。

对于我自己的代码,因为我不想在每个字段中这样做,所以我只是在页面末尾进行以下操作,以便通过客户端逻辑显示字段:

<script type="text/javascript" language="javascript">
    $(function() {
        var errors = @Html.Raw(Json.Encode(Model.FieldsInError));
        for(var i = 0; i < errors.length; i++) {
            $("#" + errors[i]).removeClass("hidden");
        }
    });
</script>

但是,这确实对控制器内部的视图结构产生了依赖,因此我建议斯蒂芬根据MVC方法使视图和控制器保持独立的方法。

最新更新