如何在razor视图代码块中内否自定义函数
2015-04-15 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464981
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
这个问题有点意思,Razor的自动闭合性,导致JS代码不能直接与Razor代码混排,原来ASPX页面中,我们到处可见这种代码
<%
if(Model!=null){
foreach (var item in Model.Res_ResourceProperty_Ext.GroupBy(i => i.PlatformID))
{
string vidArr="";
string vidNameArr="";
foreach (var sub in item)
{
vidArr+=sub+",";
vidNameArr+=(new Service.EEE114.Common_BasePropValueService().GetCommon_BasePropValueByID(sub.VID ?? 0)!=null?new Service.EEE114.Common_BasePropValueService().GetCommon_BasePropValueByID(sub.VID ?? 0).Name:"")+",";
}
%>
var source = html.replace(reg, function (node, key) {
return {
'Platform_SubValValue': '<%=item.Key %>',
'Platform_SubValID': 'Platform_SubVal' + '<%=item.Key %>',
'platform': '<%=((Platform)item.Key).GetDescription()%>',
'VIDValue': '<%=vidArr %>',
'VIDDisplayName': '<%=vidNameArr %>'
}[key];
});
$("#selection").append(source);
<%}
}%>
而如果是Razor页面,这种写法,显然是行不通的,因为JS变量直接混在了Razor块中,使得系统无法辨认JS,事实上,我们在razor中,可以加入<script>块
来解决这个问题,上面的代码在Razor视图中,可以类似于这样
@if (Model != null)
{
foreach (var item in Model.WebManageRoles.GroupBy(i => i.DepartmentID))
{
foreach (var sub in item)
{
<script type="text/javascript">
var reg = new RegExp("\\[([^\\[\\]]*?)\\]", 'igm'); //i g m是指分别用于指定区分大小写的匹配、全局匹配和多行匹配。
var html = document.getElementById("commentTemplate").innerHTML;
var source = html.replace(reg, function (node, key) {
return {
'Platform_SubValValue': '@item.Key',
'Platform_SubValID': 'Role' + '@item.Key',
'platform': '@item.Key',
'VIDValue': '@sub.ManageRoleID',
'VIDDisplayName': '@sub.RoleName'
}[key];
});
$("#Selection").append(source);
</script>
}
}
}
这种代码,我们感觉比ASPX里的排版更加清晰了,呵呵!
<%
if(Model!=null){
foreach (var item in Model.Res_ResourceProperty_Ext.GroupBy(i => i.PlatformID))
{
string vidArr="";
string vidNameArr="";
foreach (var sub in item)
{
vidArr+=sub+",";
vidNameArr+=(new Service.EEE114.Common_BasePropValueService().GetCommon_BasePropValueByID(sub.VID ?? 0)!=null?new Service.EEE114.Common_BasePropValueService().GetCommon_BasePropValueByID(sub.VID ?? 0).Name:"")+",";
}
%>
var source = html.replace(reg, function (node, key) {
return {
'Platform_SubValValue': '<%=item.Key %>',
'Platform_SubValID': 'Platform_SubVal' + '<%=item.Key %>',
'platform': '<%=((Platform)item.Key).GetDescription()%>',
'VIDValue': '<%=vidArr %>',
'VIDDisplayName': '<%=vidNameArr %>'
}[key];
});
$("#selection").append(source);
<%}
}%>
而如果是Razor页面,这种写法,显然是行不通的,因为JS变量直接混在了Razor块中,使得系统无法辨认JS,事实上,我们在razor中,可以加入<script>块
来解决这个问题,上面的代码在Razor视图中,可以类似于这样
@if (Model != null)
{
foreach (var item in Model.WebManageRoles.GroupBy(i => i.DepartmentID))
{
foreach (var sub in item)
{
<script type="text/javascript">
var reg = new RegExp("\\[([^\\[\\]]*?)\\]", 'igm'); //i g m是指分别用于指定区分大小写的匹配、全局匹配和多行匹配。
var html = document.getElementById("commentTemplate").innerHTML;
var source = html.replace(reg, function (node, key) {
return {
'Platform_SubValValue': '@item.Key',
'Platform_SubValID': 'Role' + '@item.Key',
'platform': '@item.Key',
'VIDValue': '@sub.ManageRoleID',
'VIDDisplayName': '@sub.RoleName'
}[key];
});
$("#Selection").append(source);
</script>
}
}
}
这种代码,我们感觉比ASPX里的排版更加清晰了,呵呵!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询