当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-TryingtoaddJSandCSStoalayoutfileinanMVC3Razorwebsitefromapartialview分享

时间:2023-04-10 14:29:51 C#

目前使用的方法类似于下面的代码,将脚本和css文件添加到布局文件的头部。公共静态类HtmlHelperExtensions{publicstaticMyCompanyHtmlHelpersMyCompany(thisHtmlHelperhtmlHelper){returnMyCompanyHtmlHelpers.GetInstance(htmlHelper);}}publicclassMyCompanyHtmlHelpers{privatestaticMyCompanyHtmlHelpers_instance;publicstaticMyCompanyHtmlHelpersGetInstance(HtmlHelperhtmlHelper){if(_instance==null)_instance=newMyCompanyHtmlHelpers();_instance.SetHtmlHelper(htmlHelper);返回实例;}私人HtmlHelper_htmlHelper;公共ItemRegistrar样式{get;私有集;}publicItemRegistrarScripts{get;私有集;}publicMyCompanyHtmlHelpers(){Styles=newItemRegistrar(ItemRegistrarFromatters.StyleFormat);Scripts=newItemRegistrar(ItemRegistrarFromatters.ScriptFormat);}privatevoidSetHtmlHelper(HtmlHelperhtmlHelper){_htmlHelper=htmlHelper;}}publicclassItemRegistrar{privatereadonlystring_format;私有只读列表_items;公共ItemRegistrar(字符串格式){_format=格式;_items=新列表();}publicItemsRegistrarAdd(stringurl){if(!_items.Contains(url))_items.Insert(0,url);归还这个;}publicIHtmlStringRender(){varsb=newStringBuilder();foreach(_items中的varitem){varfmt=字符串。格式(_格式,项目);某人。追加线(fmt);}返回新的HtmlString(sb.ToString());}}publicclassItemRegistrarFromatters{publicconststringStyleFormat="";publicconststringScriptFormat="";使用Html.MyCompany().Styles.Add("/Dashboard/Content/Dashboard.css");添加文件...和@Html。MyCompany().Styles.Render()在Layout_.cshtml中呈现它们我的问题是这是一个静态方法,这意味着它保留样式表和脚本文件的列表。我需要做同样的事情,但没有坚持。我需要根据每个请求重新创建列表,因为它们会逐页更改其在特定页面上的外观。是否可以在添加所需脚本之前或在呈现脚本之后清除每个请求的列表?更新:不使用部分、RenderPartial或RenderaActions的原因是为了防止多次将相同的样式表或脚本文件添加到布局文件。正在建设的网站有一个Layout_.cshtml,基本布局。这反过来又被遍历项目列表的视图使用,并且对于每个项目,调用RenderAction输出该项目的特定部分视图。这些局部视图有时需要添加样式表和脚本。由于可能需要从不同的局部视图添加许多不同的脚本和样式表,我认为可以完成样式和脚本的全局列表,因此有一个全局位置来检查脚本是否已全部添加到集合中,并且然后按照添加顺序一次全部渲染它们。更新2:真正的问题是如何在不使用静态扩展方法的情况下执行相同类型的功能(全局列表)。我会用部分来做到这一点,即@sectionhead{...在这里添加你想要的任何东西......}并从布局中渲染“head”部分:......这里的其他东西......@RenderSection(“head”,required:false)如果您不想要该部分并且不想传递它,我会在这里使用HttpContext;针对HttpContext.Current.Items[someKey]存储一些数据。如果为null,则创建一个新的并将其存储在上下文中。例如:publicstaticMyCompanyHtmlHelpersGetInstance(HtmlHelperhtmlHelper){conststringkey="MyCompanyHtmlHelpersInstance";IDictionary项目=(htmlHelper==null||htmlHelper.ViewContext==null||htmlHelper.ViewContext.HttpContext==null)?HttpContext.Current.Items:htmlHelper.ViewContext.HttpContext.Items;MyCompanyHtmlHelpersobj=(MyCompanyHtmlHelpers)items[key];if(obj==null){items.Add(key,obj=newMyCompanyHtmlHelpers());}返回对象;我也遇到了同样的问题,提了一些建议,希望对你有帮助。请参阅我问的另一个问题:HowtorenderjavascripttoaMasterLayoutsectionfromapartialview?您需要做的是以稍微不同的方式扩展HtmlHelper。publicstaticMvcHtmlStringAddStyle(thisHtmlHelperhtml,stringstyleUrl){stringstyleTag=string.Format("",styleUrl);返回MvcHtmlString.Create(styleTag);然后在您的视图中执行:@Html.AddStyle("/Dashboard/Content/Dashboard.css")如果您需要根相对URL,请输入Url内容助手。@Html.AddStyle(Url.Content("~/Dashboard/Content/Dashboard.css"))从视图或部分视图中尝试此操作,将css或javascript文件添加到布局标题中,而不是部分视图对我有用。对于部分视图,将数据传递给静态类。以上就是C#学习教程:从局部视图尝试在MVC3Razor网站的布局文件中添加JS和CSS。如果对大家有用,需要进一步了解C#学习教程,还望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: