Yar*_*une 5 razor jqote asp.net-mvc-4
对于一个项目,我使用jqote进行模板化,使用MVC 4和Razor生成的JavaScript和HTML.
请查看HTML和Razor中的以下代码:
<script id="testTemplate" type="text/html">
<p>Some html</p>
@{string id = "<%=this.Id%>";}
<!-- 1 -->
@if(true)
{
@Html.Raw(@"<select id="""+id+@"""></select>")
}
<!-- 2 -->
@if(true)
{
<select id="@Html.Raw(id)"></select>
}
<!-- 3 -->
@Html.Raw(@"<select id="""+id+@"""></select>")
<!-- 4 -->
<select id="@Html.Raw(id)"></select>
<!-- 5 -->
<select id="<%=this.Id%>"></select>
</script>
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
<script id="testTemplate" type="text/html">
<!-- 1 -->
<select id="<%=this.Id%>"></select> <!--Good!-->
<!-- 2 -->
<select id="<%=this.Id%>"></select> <!--BAD!-->
<!-- 3 -->
<select id="<%=this.Id%>"></select> <!--Good!-->
<!-- 4 -->
<select id="<%=this.Id%>"></select> <!--Good!-->
<!-- 5 -->
<select id="<%=this.Id%>"></select> <!--Good!-->
</script>
Run Code Online (Sandbox Code Playgroud)
现在,问题在于第二个选择下<!-- 2 -->.人们会期望Html.Raw在这里踢,但不知何故它没有.或者Razor想要HtmlEncode那里有什么.
问题是:有没有人知道为什么?这是一个bug还是设计?
没有脚本标签就可以了.但是我们需要脚本标签,因为我们需要在JavaScript中使用模板.
硬编码它可以工作,但我们需要使用变量,因为这并不总是一个模板.
没有@if它的工作,但它在那里,我们需要它.
这些行提供类似的良好输出:
@if(true)
{
<select id= "@Html.Raw(id)"></select>
}
@if(true)
{
<select id ="@Html.Raw(id)"></select>
}
@if(true)
{
<select id @Html.Raw("=")"@Html.Raw(id)"></select>
}
Run Code Online (Sandbox Code Playgroud)
我们打算这样做:
<script id="testTemplate" type="text/html">
@{string id = @"id=""<%=this.Id%>""";}
@if(true)
{
<select @Html.Raw(id)></select>
}
</script>
Run Code Online (Sandbox Code Playgroud)
...尽可能保持标记的完整性.
编辑正确阅读提供的代码后:
这看起来像一个错误。它以某种方式连接到 id 属性。将属性更改为其他内容即可。
@if(true)
{
<select data-id="@Html.Raw(id)"></select>
}
Run Code Online (Sandbox Code Playgroud)
显然这不是解决方案,只是验证。您的示例 4 或多或少意味着它不是有意设计的,否则也应该失败。
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |