asp.net-mvc – 如何在MVC3中的局部视图中渲染节?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 如何在MVC3中的局部视图中渲染节?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在MVC3项目中,我有一个带有此代码的“_Layout.vbhtml”文件
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. </head>
  5. <body>
  6. ...
  7. <script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script>
  8. @RenderSection("Scripts",false)
  9. </body>
  10. </html>

然后,我在共享文件夹中有一个部分视图“ValidationScripts.vbhtml”

  1. @Section Scripts
  2. <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
  3. <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
  4. <script src="@Url.Content("~/Scripts/jquery.validate.fix.js")"></script>
  5. <script src="@Url.Content("~/Scripts/localization/messages_de.js")"></script>
  6. End Section

如果我从这样的视图中调用部分视图…

  1. @ModelType MvcExample.MyModel
  2. @Code
  3. ViewData("Title") = "Test"
  4. End Code
  5.  
  6. @Html.Partial("ValidationScripts")
  7.  
  8. <h2>Just a Test</h2>
  9. ...

部分“脚本”不在页面上呈现,输出HTML是

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. </head>
  5. <body>
  6. ...
  7. <script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script>
  8.  
  9. </body>
  10. </html>

如何在局部视图中渲染剖面?

解决方法

我在重复的脚本之上有同样的问题,所以我创建了几个Extension方法
  1. public static class HtmlHelperExtensions
  2. {
  3. private const string _jSViewDataname = "RenderJavaScript";
  4. private const string _styleViewDataname = "RenderStyle";
  5.  
  6. public static void AddJavaScript(this HtmlHelper htmlHelper,string scriptURL)
  7. {
  8. List<string> scriptList = htmlHelper.ViewContext.HttpContext
  9. .Items[HtmlHelperExtensions._jSViewDataname] as List<string>;
  10. if (scriptList != null)
  11. {
  12. if (!scriptList.Contains(scriptURL))
  13. {
  14. scriptList.Add(scriptURL);
  15. }
  16. }
  17. else
  18. {
  19. scriptList = new List<string>();
  20. scriptList.Add(scriptURL);
  21. htmlHelper.ViewContext.HttpContext
  22. .Items.Add(HtmlHelperExtensions._jSViewDataname,scriptList);
  23. }
  24. }
  25.  
  26. public static MvcHtmlString RenderJavaScripts(this HtmlHelper HtmlHelper)
  27. {
  28. StringBuilder result = new StringBuilder();
  29.  
  30. List<string> scriptList = HtmlHelper.ViewContext.HttpContext
  31. .Items[HtmlHelperExtensions._jSViewDataname] as List<string>;
  32. if (scriptList != null)
  33. {
  34. foreach (string script in scriptList)
  35. {
  36. result.AppendLine(string.Format(
  37. "<script type=\"text/javascript\" src=\"{0}\"></script>",script));
  38. }
  39. }
  40.  
  41. return MvcHtmlString.Create(result.ToString());
  42. }
  43.  
  44. public static void AddStyle(this HtmlHelper htmlHelper,string styleURL)
  45. {
  46. List<string> styleList = htmlHelper.ViewContext.HttpContext
  47. .Items[HtmlHelperExtensions._styleViewDataname] as List<string>;
  48.  
  49. if (styleList != null)
  50. {
  51. if (!styleList.Contains(styleURL))
  52. {
  53. styleList.Add(styleURL);
  54. }
  55. }
  56. else
  57. {
  58. styleList = new List<string>();
  59. styleList.Add(styleURL);
  60. htmlHelper.ViewContext.HttpContext
  61. .Items.Add(HtmlHelperExtensions._styleViewDataname,styleList);
  62. }
  63. }
  64.  
  65. public static MvcHtmlString RenderStyles(this HtmlHelper htmlHelper)
  66. {
  67. StringBuilder result = new StringBuilder();
  68.  
  69. List<string> styleList = htmlHelper.ViewContext.HttpContext
  70. .Items[HtmlHelperExtensions._styleViewDataname] as List<string>;
  71.  
  72. if (styleList != null)
  73. {
  74. foreach (string script in styleList)
  75. {
  76. result.AppendLine(string.Format(
  77. "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />",script));
  78. }
  79. }
  80.  
  81. return MvcHtmlString.Create(result.ToString());
  82. }
  83. }

在任何视图或部分视图或显示/编辑模板上,您只需添加所需内容

  1. @{
  2. Html.AddJavaScript("http://cdn.jquerytools.org/1.2.7/full/jquery.tools.min.js");
  3. }

在您的布局中,您可以将其渲染到您想要的位置:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. @Html.RenderStyles()
  5. @Html.RenderJavascripts()

您可能遇到的唯一问题是如果复杂化,脚本的呈现顺序。如果这成为一个问题,只需将脚本添加到视图/模板的底部,然后在呈现它们之前简单地颠倒扩展方法中的顺序。

猜你在找的asp.Net相关文章