在视图中的MVC项目中,我试图使用下面的代码获取数据。我的问题是语法错误
@functions{
string GetRootRowHtml(List<CORE.Models.Category> categories, int parentId)
{
string html = String.Empty;
foreach (var category in categories.Where(c => c.ParentId == parentId))
{
var childList = GetRootRowHtml(categories, category.Id);
var categoryHtml = "<li class=\"dd-item\" data-id=\"" + category.Id + "\" data-role=\"collapsible\" data-iconpos=\"left\" data-inset=\"false\">";
categoryHtml += "<div class=\"dd-handle dd-nodrag\">";
categoryHtml += "<div style=\"margin: 0 10px; width:25px; height:25px; float: left;\"></div>";
categoryHtml += "<span class=\"label label-info\"><i class=\"fa fa-arrows\" ></i></span>" + category.Name.Replace("'", @"\'") +
"</div>" +
"<span class=\"pull-right menu_process\">";
if (CORE.Models.User.IsAllowedTo(CORE.Models.User.AccessType.CATEGORY_UPDATE))
{
categoryHtml += "<button class=\"btn btn-primary btn-circle\" onClick=\"UpdateCategory(" + category.Id + ")\" style =\"margin-right:10px;\" type=\"button\" title =\"" + Resources.Resource.Edit + "\"> <i class=\"fa fa-edit\"></i></button>";
categoryHtml += "<button class=\"btn btn-success btn-circle\" onClick=\"ShowCategory(" + category.Id + ",\""+ category.Name + "\")\" style =\"margin-right:10px;\" type=\"button\" title =\"" + Resources.Resource.Edit + "\"> <i class=\"fa fa-list\"></i></button>";
}
html += categoryHtml;
}
return html;
}
}
上面的代码,我在下面的代码行中出现语法错误。
categoryHtml += "<button class=\"btn btn-success btn-circle\" onClick=\"ShowCategory(" + category.Id + ",\""+ category.Name + "\")\" style =\"margin-right:10px;\" type=\"button\" title =\"" + Resources.Resource.Edit + "\"> <i class=\"fa fa-list\"></i></button>";
错误在
之下未捕获的SyntaxError:意外的令牌}
原因是报价。在onclick方法中有一个quato,在onclick函数参数中还有另一个quato for string。我尝试了很多,但找不到解决方案。 我该如何解决这个问题?
提前致谢。
答案 0 :(得分:0)
以下是更正,由于类别名称参数中的双引号,它 在html中终止函数字符串。
你可以把它放在单引号中。
categoryHtml += "<button class=\"btn btn-success btn-circle\" onClick=\"ShowCategory(" + category.Id + ",'"+ category.Name + "')\" style =\"margin-right:10px;\" type=\"button\" title =\"" + Resources.Resource.Edit + "\"> <i class=\"fa fa-list\"></i></button>";
所以最终代码应该如下所示。
single quotes
答案 1 :(得分:0)
在double quotes
内使用categoryHtml += "<button class='btn btn-success btn-circle' onclick='ShowCategory(" + category.Id + ", '"+ category.Name + "')' style ='margin-right:10px;' type='button' title ='" + Resources.Resource.Edit + '"> <i class='fa fa-list'></i></button>";
。格式化起来要容易得多。
URL
答案 2 :(得分:0)
这不会真正回答你的问题,但有更好,更清洁的技术来解决这个问题。维护这样的代码真的很难,并且很容易遇到错误。所有报价转义的代码都是一大堆。您应该看到使用&#34;显示模板&#34;,&#34;帮助方法&#34;或其他模板技术,甚至是string.Format()
和&#34;字符串插值&#34; (C#6+)做得更好。
我强烈建议重写使用辅助方法。 你可以像这样编写你的Html:
@helper WriteRootRowHtml(List<CORE.Models.Category> categories, int parentId) {
foreach (var category in categories.Where(c => c.ParentId == parentId))
{
<li class="dd-item" data-id="@category.Id" data-role="collapsible" data-iconpos="left" data-inset="false">
<div class="dd-handle dd-nodrag">
<div style="margin: 0 10px; width:25px; height:25px; float: left;"></div>
<span class="label label-info"><i class="fa fa-arrows" ></i></span> @(category.Name.Replace("'", @"\'"))
</div>
<span class="pull-right menu_process">
@if (CORE.Models.User.IsAllowedTo(CORE.Models.User.AccessType.CATEGORY_UPDATE))
{
<button class="btn btn-primary btn-circle" onClick="UpdateCategory(@(category.Id))" style ="margin-right:10px;" type="button" title="@Resources.Resource.Edit">
<i class="fa fa-edit"></i>
</button>
<button class="btn btn-success btn-circle" onClick="ShowCategory(@(category.Id), '@HttpUtility.JavaScriptStringEncode(category.Name)')" style ="margin-right:10px;" type="button" title="@Resources.Resource.Edit">
<i class="fa fa-list"></i>
</button>
}
}
}
你看,没有引用转义,你可以简单地用Razor语法中的变量插入Html。如果您的名字可能包含一些特殊字符(如文本中的引号),请使用HttpUtility.JavaScriptStringEncode
以防止破坏您的Html输出。
可以使用View中的WriteRootRowHtml
直接执行帮助器@WriteRootRowHtml(...)
,它将输出到视图,但如果您只想要字符串进行进一步处理,则可以执行以下操作:
@{
var generatedHtml = WriteRootRowHtml(...).ToHtmlString();
}