• 将不确定变为确定~Razor视图中是否可以嵌套JS代码


    回到目录

    这个问题有点意思,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里的排版更加清晰了,呵呵!

    感谢Razor!

    回到目录

  • 相关阅读:
    从客户端(Content="<p>666</p>")中检测到有潜在危险的 Request.Form 值。
    VS插件集
    Carmack在QUAKE3中使用的计算平方根的函数
    自动匹配HTTP请求中对应实体参数名的数据(性能不是最优)
    webapi单元测试时出现的ConfigurationManager.ConnectionStrings为空错误
    @@IDENTITY在加触发器时返回错误的ID值
    Protobuf完整实例
    Apache配置多个监听端口和不同的网站目录的简单方法[转]
    ThinkPHP 小技巧
    复选框 ajax取得后台页面
  • 原文地址:https://www.cnblogs.com/lori/p/3049514.html
Copyright © 2020-2023  润新知