asp.net – 在MVC5中使用java脚本代码 – 放在哪里
我有MVC5应用程序,在视图index.cshtml我需要使用
一些 java脚本代码,目前我把脚本代码放在视图中,它的工作正常. 我的问题是我应该把这段代码放在哪里(最好的做法),应该如何 我从这个角度来看,请举一个例子. 解决方法
我下面写的方法是我从你的意见中完全提取
JavaScript的方法.
>更好地维护(js问题 – >查看js文件而不是在视图中) 在HTML5中,使用data属性从Model中传递变量. 1.1绑定c#到HTML <div class="news" data-js-params="websiteName=@LocationWebsiteHelper.CurrentLocationWebsiteName()&languageName=@languageName&page=0&itemsPerPage=@Model.MaxNumberOfItems"> 1.2 JS Helper将数据转换为对象文字的功能 虽然建立在jQuery上,我已经写了2个小功能,可以帮助将querystring变量移入对象文字和后面.我使用这些在我的js文件中: // @param (qs): a query string of key value pairs (without ?) // @param (keyDelimiter): string : character between values and keys // @param (valDelimiter): string : character between keys and values // @return (obj): an object literal // @example: key1=val1&key2=val2&key3=val3 convertQsToLiteral: function (qs,keyDelimiter,valDelimiter) { var arrParams,obj = {}; if (qs && qs.length) { keyDelimiter = keyDelimiter || '&'; valDelimiter = valDelimiter || '='; arrParams = qs.split(keyDelimiter); $.each(arrParams,function (i,pair) { var arrPair = pair.split(valDelimiter),key = arrPair[0],val = arrPair[1]; obj[key] = val; }); } return obj; },// @param (literal): an object literal key value paired of one level deep // @param (keyDelimiter): string character between values and keys // @param (valDelimiter): string : character between keys and values // @return (string): array string representation // @example: { key1: val1,key2: val2,key3: val3 } convertLiteralToQs: function (literal,valDelimiter) { var arrQs = [],arrPairs,key; keyDelimiter = keyDelimiter || '&'; valDelimiter = valDelimiter || '='; for (key in literal) { if (literal.hasOwnProperty(key)) { arrPairs = []; arrPairs.push(key,literal[key]); arrQs.push(arrPairs.join(valDelimiter)); } } return arrQs.join(keyDelimiter); }, 1.3将HTML数据转换为js对象文字 考虑到这些功能,您可以将任何类似变量的查询字符串传递给对象文字. var dataParams = convertQsToLiteral($('.news').data('js-params')); // get data attr var urlParams = convertQsToLiteral(window.location.search.substr(1)); // get url query string 1.4示例:JS模块化设置来扩展和覆盖对象字面值 结合jQuery的$.extend()函数,您现在可以使用模块化方法覆盖JavaScript对象(考虑到所有的闭包js文件/模块看起来像这样): window.ProjectName = (function($,projectname){ // default object literal var cfg = { // your default options idea: 'great' }; // @param (options): something like the cfg object projectname.Module = function (options) { this.settings = $.extend(true,{},cfg,options); // deep copy this.init(); }; projectname.Module.prototype = { init: function(){ this.idea = this.settings.idea; console.log(this.idea); } }; return projectname; }(window.jQuery,window.ProjectName)); 1.5初始化js模块 var module = new ProjectName.Module({ idea: 'even better' }); 2.1将脚本/ CSS添加到您的视图 您有几个选项将脚本附加到您的视图/页面/块: >在baselayout中定义的部分(仅用于部分视图,直接包含在baselayout中) 2.2.1 baselayout设置段 @RenderSection("AdditionalJS",false) 2.2.2使用部分视图 @section AdditionalJS { <script> var module = new ProjectName.Module({ idea: @Model.idea }); </script> } 2.3.1 baselayout设置视图中的视图 @Html.Raw(Html.RequiredClientResources(RenderingTags.Header)) 2.3.2视图中的使用视图 ClientResources.RequireScript("/Design/js/projectname.module.js").AtHeader(); 2.4.1用于脚本的BundleConfig设置 /// <summary> /// Register the Javascript bundles /// Separated in libJs,projectJs and polyfillJs /// </summary> /// <param name="bundles"></param> private static void RegisterScripts(BundleCollection bundles) { // usage for libraries bundles.Add(new ScriptBundle( "~/bundles/libJs").Include( "~/Design/js/lib/*.js" )); // project object bundles.Add(new ScriptBundle( "~/bundles/projectJs").Include( "~/Design/js/project.dev.js","~/Design/js/classes/*.js","~/Design/js/components/*.js" )); // usage for browser support bundles.Add(new ScriptBundle( "~/bundles/polyfillJs").Include( "~/Design/js/polyfills/*.js" )); } /// <summary> /// Render scripts inside conditional comments /// https://stackoverflow.com/questions/12865939/mvc4-bundling-minification-with-ie-conditional-comments /// </summary> /// <param name="ie"></param> /// <param name="paths"></param> /// <returns></returns> public static IHtmlString RenderConditionalScripts(string ie,params string[] paths) { var tag = string.Format("<!--[if {0}]>{1}<![endif]-->",ie,Scripts.Render(paths)); return new MvcHtmlString(tag); } 2.4.2 baselayout设置 ... <head> ... @BundleConfig.RenderConditionalScripts("lte IE 9","~/bundles/polyfillJs") @Scripts.Render("~/bundles/libJs") <head> <body> ... @Scripts.Render("~/bundles/projectJs") </body> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – html脚本标签不使用类型javascript?
- asp.net-mvc – 集成测试ASP.NET MVC应用程序
- asp.net – 为customvalidator设置errormessage?
- 使用WebAPI进行RESTFul身份验证
- asp.net – 是什么导致Squishit重建捆绑包
- asp.net – 设置asp:DropDownList的html’name’attriubut
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]
- 如何从asp.net中的javascript调用codebehind函数?
- asp.net-mvc-3 – Request.Url何时可以为null?
- asp.net-core – 如何在.NET Core 2.0中使用PrincipalConte
- asp.net-mvc – 如何在不给每个控制器放置注释的
- asp.net – Visual Studio 2015 Web应用程序.NET
- asp.net-mvc – 如何使用MsBuild MsDeployPublis
- 为什么在手动刷新响应时ASP.NET将使用Transfer-E
- asp.net-mvc – 使用MVC使用List填充@ Html.Drop
- asp.net-mvc-3 – ASP.NET MVC 3从控制器返回.cs
- asp.net-mvc – 可以在运行时更改数据注释吗? (
- asp.net-mvc – 从视图到控制器POST信用卡数据是
- asp.net-mvc-4 – 如何在视图页面上缩小脚本块内
- asp.net-mvc – ASP.NET MVC WebSite中的ERR_EMP