Javascript、Razor/MVC3 中的 C# if 语句
Posted
技术标签:
【中文标题】Javascript、Razor/MVC3 中的 C# if 语句【英文标题】:C# if statement within Javascript, Razor/MVC3 【发布时间】:2012-03-29 16:19:22 【问题描述】:好的,所以我尝试在我的 javascript 中使用“if”语句。根据我模型中的布尔值,函数应该返回一些 html 或空字符串。这基本上就是我想做的:
function getSomeHtml()
var myHtml = '';
@if(Model.UseSomeNiceHtml)
<text>
myHtml += '<div> <p class="label">Whatever</p></div>';
</text>
return myHtml;
类似的代码在使用 foreach 循环时效果很好(在上面的示例中基本上用 foreach 替换了 if)。使用 if 语句时,我收到错误 “遇到没有匹配开始标签的结束标签“文本”。你的开始/结束标签是否正确平衡?”。当我删除 <text>
标记时,我收到错误 "Too many characters in character literal"。
谁能指出我正确的方向?
谢谢! :)
【问题讨论】:
<text>
标签的意义何在?看起来if
语句只是确定myHtml
是否应该更改。如果是这种情况,我看不到 `<text>
标签有什么作用?
@AndersDaniel 查看我对以下答案的评论:
【参考方案1】:
好的,这对我有用。刚刚测试过。
function getSomeHtml()
var myHtml = '';
@
if (Model.UseSomeNiceHtml)
<text>
myHtml += '<div> <p class="label">Whatever</p></div>';
</text>
return myHtml;
我添加了一组额外的。
【讨论】:
查看我在原始问题中的编辑,了解我是如何解决问题的 :) 我认为你不必逃避那些斜线 - 我没有,它奏效了。但是在您的编辑中,您还完成了我在回答中所做的事情,即在 C# 代码周围添加了
。
是的,没错,但实际上并不需要。问题似乎是,例如,如果您只有一行上的结束标签,解析器的内容无法与起始标签匹配。尝试将您的答案分成两行(分两步添加到 myHtml)并查看:)跨度>
您很可能不需要转义斜线。在您的编辑中,您实际上并没有转义所有结束标签斜杠吗?您是否尝试过自己的示例而不逃避它们?编辑:我会尝试并回复你。
我现在也尝试在 myHtml 中添加两行,这没有问题。我可以在一行中为自己添加'
',它工作得很好。此外,我刚刚发现您的原始代码可以正常工作(同时添加两行单独的代码)。我很傻,没有先尝试过。【参考方案2】:
好的,首先:感谢您的意见,这让我开始思考。最终我找到了解决方案,问题是结束 html 标记中的未转义“/”。这些标签没有转义,我的标签吓坏了。无论如何,我想我会与您分享我完成的代码的样子。我想它可以作为如何在 javascript 函数中同时使用 C# 循环和 if 语句的示例。
function getSubActivitiesHtml(participantId)
var html = "";
@
if(Model.UseSubActivities)
<text>
html += "<div class=\"textinput req\"><div class=\"checkbox req\">";
</text>
foreach (var subActivity in Model.SubActivities)
<text>
html += "<p><input id=\"activity_" + participantId + "_@(subActivity.Id)\" name=\"Participants[" + participantId + "].SelectedSubActivities\" value=\"@(subActivity.Id)\" type=\"checkbox\" />";
html += "<label for=\"activity_" + participantId + "_@(subActivity.Id)\">@(subActivity.Name)</label></p>";
</text>
<text>
html += "<\/div><p class=\"label\">Delaktiviteter</p><\/div>";
</text>
return html;
注意结束 html 标记是如何转义的...
【讨论】:
注意你可以使用@:
标签来表示非MVC代码(而不是<text>...</text>
)。见weblogs.asp.net/scottgu/…【参考方案3】:
尝试删除<text>
标签或将它们放在myHtml += '';
语句中
【讨论】:
我会说删除它们,它们没有用。 不知道他的 html 和 css 是什么,他可能会使用<text>
标记时出现的“字符文字中的字符过多”错误是因为它试图将 myHtml +=
行解析为 C#。在 C# 中'x'
是一个字符,它只能是一个字符。所以你包含<text>
标签是对的。
查看我在原始问题中的编辑,了解我是如何解决问题的 :)【参考方案4】:
试试这个:
function getSomeHtml()
@
var myHtml = "";
if(Model.UseSomeNiceHtml)
myHtml += "<div> <p class='label'>Whatever</p></div>";
return "@myHtml";
【讨论】:
查看我在原始问题中的编辑,了解我是如何解决问题的 :)【参考方案5】:这也有效。
function getSomeHtml()
var myHtml = '';
if('@Model.UseSomeNiceHtml' === '@true')
myHtml += '<div> <p class="label">Whatever</p></div>';
return myHtml;
【讨论】:
【参考方案6】:function @(treeviewConfig.AddNewTreeviewNode)(treeNode)
@if (!string.IsNullOrEmpty(NodeIDKey) && !string.IsNullOrEmpty(treeviewConfig.ParentIdExpr))
<text>
treeNode['@(treeviewConfig.ParentIdExpr)'] = treeNode['@(NodeIDKey)'];
treeNode['@(NodeIDKey)'] = 0;
</text>
@if ( !string.IsNullOrEmpty(treeviewConfig.DisplayExpr))
<text>
treeNode['@(treeviewConfig.DisplayExpr)'] = 'nue';
</text>
@if ( !string.IsNullOrEmpty(treeviewConfig.EditTreeviewNode))
<text>
treeNode['@(treeviewConfig.EditTreeviewNode)'] = 'nue';
</text>
PopulateTreeViewNodeInputs(treeNode);
@(treeviewConfig.ShowTreeEditPopup)();
这对我很有效
【讨论】:
以上是关于Javascript、Razor/MVC3 中的 C# if 语句的主要内容,如果未能解决你的问题,请参考以下文章