Tôi đã cố gắng sử dụng ASP.NET MVC trong một thời gian, sau đó tôi phải đối mặt với một vấn đề mà tôi không muốn bao gồm tất cả các js và css của tôi trong trang chủ. Nhưng làm thế nào tôi có thể đăng ký nó trong phần đầu của trang chủ từ quan điểm cụ thể của tôi?Trình trợ giúp đăng ký Script & CSS trong ASP.NET MVC?
Trả lời
Mẫu trang chính mặc định bao gồm Nội dung cấp địa chỉ cho đầu. Nếu nó không bạn có thể dễ dàng thêm một:
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server" />
</head>
quan điểm của bạn sau đó có thể đặt bất cứ điều gì họ muốn trong đầu:
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script src="Scripts/myScripts.js" type="text/javascript"></script>
<link href="Styles/myStyles.css" rel="stylesheet" type="text/css" />
</asp:Content>
về mặt kỹ thuật, bạn nên đặt tất cả các js ở cuối trang để có hiệu suất tốt nhất.
Tôi nghĩ rằng cách duy nhất bạn có thể làm điều này mặc dù sẽ bao gồm javascript trong VIewData và có ViewData được hiển thị trên trang chủ (không phải là một giải pháp tuyệt vời).
Nó không giống như có một lựa chọn đơn giản 'built- trong khuôn khổ ASP.NET MVC chưa. Nếu bạn đang sử dụng điều khiển người dùng (.ascx), có thể bạn đang tạo các điều khiển tự chứa cũng muốn quản lý các yêu cầu JavaScript của riêng mình, thì bạn thậm chí không thể sử dụng trình giữ chỗ để giúp bạn.
Cuối cùng tôi đã tạo ra một lớp helper và trong đó có một vài phương pháp:
private static SortedList<int, string> GetRegisteredScriptIncludes()
{
var registeredScriptIncludes = System.Web.HttpContext.Current.Items["RegisteredScriptIncludes"] as SortedList<int, string>;
if (registeredScriptIncludes == null)
{
registeredScriptIncludes = new SortedList<int, string>();
System.Web.HttpContext.Current.Items["RegisteredScriptIncludes"] = registeredScriptIncludes;
}
return registeredScriptIncludes;
}
public static void RegisterScriptInclude(this HtmlHelper htmlhelper, string script)
{
var registeredScriptIncludes = GetRegisteredScriptIncludes();
if (!registeredScriptIncludes.ContainsValue(script))
{
registeredScriptIncludes.Add(registeredScriptIncludes.Count, script);
}
}
public static string RenderScripts(this HtmlHelper htmlhelper)
{
var registeredScriptIncludes = GetRegisteredScriptIncludes();
var scripts = new StringBuilder();
foreach (string script in registeredScriptIncludes.Values)
{
scripts.AppendLine("<script src='" + script + "' type='text/javascript'></script>");
}
return scripts.ToString();
}
Đó là một hình thức cơ bản của nó anyway để thử và thấy cách nó hoạt động. Nó có thể được tăng cường bằng nhiều cách, nhưng tại thời điểm nó chỉ lọc ra các yêu cầu chèn kịch bản trùng lặp cho bạn. Bất cứ khi nào bạn muốn thêm một kịch bản mới trong ascx (hoặc aspx cho rằng vấn đề), bạn có thể làm theo cách này:
<%
Html.RegisterScriptInclude(Url.Content("~/Scripts/MapLayers/MapLayer.js"));
Html.RegisterScriptInclude(Url.Content("~/Scripts/MapLayers/Vehicles.js"));
%>
Sau đó, bạn cần phải nhớ để xuất chúng khi bạn đã hoàn tất. Điều này đạt được bằng cách thực hiện cuộc gọi sau tại địa điểm trong trang của bạn nơi bạn muốn xuất các thẻ tập lệnh:
<%=Html.RenderScripts() %>
Dường như làm việc cho tôi. Tôi đã mong đợi một nửa để có vấn đề rendering tùy thuộc vào những gì điểm RenderScripts được gọi là, đặc biệt là nếu không phải tất cả các RegisterScriptIncludes đã được gọi được nêu ra, nhưng cho đến nay nó dường như làm công việc. Nếu bạn hoàn thành các tập lệnh thì bạn sẽ không gặp vấn đề gì.
@ Jason: CẢNH BÁO, bạn không nên sử dụng biến tĩnh như thế này ... Trong ngữ cảnh web, biến tĩnh được chia sẻ trên tất cả người dùng và tất cả yêu cầu trang. Tôi ngạc nhiên rằng bạn đã không gặp rắc rối với mã của bạn. Nguyên tắc là tốt nhưng mã là sai và sẽ cho bạn gặp rắc rối. Trong trường hợp này, bạn nên sử dụng System.Web.HttpContext.Current.Items. Xem http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspx để biết thêm.
Cảm ơn bạn đã trưởng thành - bạn học được điều gì đó mới mẻ mỗi ngày! Tôi đã thay đổi mã phù hợp với nhận xét của bạn. – Jason
Thuộc tính tĩnh trong câu hỏi là một tham chiếu đến HttpContext.Items (cụ thể cho ngữ cảnh yêu cầu, mỗi liên kết của bạn, không phải là một biến thành viên tĩnh. Nó tương đối an toàn, trừ khi nhiều luồng được tạo thủ công để truy cập thành viên tĩnh này, trường hợp một khóa trên context.items hiện tại sẽ là thích hợp (tương tự cho từ điển, hoặc sử dụng ConcurrentDictionary). – Tracker1
Dưới đây là một giải pháp tương tự như Jason đã, nhưng có ý kiến vdh_ant của xem xét:
http://frugalcoder.us/post/2009/06/29/Handling-Scripts-in-ASPNet-MVC.aspx
MVC Futures hiện nay đã được xây dựng trong những người giúp đỡ cho việc này ...
1.<head>
2. <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
3. <%= Html.Css("BlueTheme/site.css") %>
4. <%= Html.Script("jquery-1.3.2.js") %>
5.</head>
biết thêm thông tin ở đây: http://blog.osbornm.com/archive/2009/10/12/mvc-script-css-helpers.aspx
Mathew,
tôi đã xem xét blog của bạn trên Html.Css và Html.Script người giúp đỡ. Tôi không có ý là quan trọng nhưng tôi không thấy bất kỳ đề cập trong blog về cách Css và Script giúp giải quyết vấn đề được thảo luận ở đây. Vấn đề ở đây là một trong những yêu cầu tham chiếu kịch bản "đã đăng ký" tại bất kỳ điểm nào trong quá trình kết xuất và có thể nhiều lần (trong trường hợp mẫu hoặc xem một phần được sử dụng nhiều lần và đăng ký tập lệnh của riêng nó), và sau đó xuất ra các kết quả tổng hợp, sans trùng lặp, ở một vị trí duy nhất.
Nếu giải pháp của bạn giải quyết vấn đề này, vui lòng sửa tôi bằng cách làm rõ.
--Regards, Ken
tôi đã viết chỉ một người quản lý như vậy cho MVC, và viết về nó trên blog của tôi:
"JavascriptHelper–Managing JS files for ASP.NET MVC"
UPDATE: Tôi thêm vào bundling: "JavascriptHelper:Managing JS files for ASP.NET MVC (With Bundling)"
- 1. Cần trợ giúp xây dựng Trình trợ giúp Html tùy chỉnh cho Asp.net MVC
- 2. Trợ giúp với ASP.NET MVC Thiết kế API HtmlHelper
- 3. Tại sao chúng ta sử dụng trình trợ giúp HTML trong ASP.NET MVC?
- 4. ASP.NET MVC - Nhận tên điều khiển và hành động hiện tại trong trình trợ giúp
- 5. Trợ giúp với C# và bool trên asp.net MVC
- 6. Đăng ký chức năng Trợ giúp Node.JS + Express
- 7. Styling người giúp đỡ HTML ASP.NET MVC
- 8. ASPNET MVC - Ghi đè Html.TextBoxFor (model.property) với trình trợ giúp mới có cùng chữ ký?
- 9. Cú pháp ASP.NET MVC @helper vs Html Trình trợ giúp mở rộng
- 10. ASP.NET MVC Preview 5 - Trình trợ giúp Html.Image đã di chuyển không gian tên
- 11. Làm cách nào để sử dụng Trình trợ giúp HTML ValidationMessage ASP.NET MVC bên trong trình trợ giúp tùy chỉnh của riêng tôi?
- 12. ASP.NET MVC 3 Trình trợ giúp HTML tùy chỉnh- Thực tiễn tốt nhất/Sử dụng
- 13. Đăng ký đúng JavaScript và CSS trong MVC 2 Mẫu biên tập
- 14. Làm thế nào để bạn đăng ký một trình trợ giúp tùy chỉnh nếu bạn đang biên dịch trước một trình trợ giúp tùy chỉnh trong Handlebars.js?
- 15. Bất kỳ trình trợ giúp điều hướng trang nào cho ASP.NET MVC?
- 16. Đường dẫn động trong Trình trợ giúp
- 17. Tạo phần mở rộng nút MVC Delete - Cách mở rộng trình trợ giúp Html của MVC?
- 18. Trợ giúp với Cấu hình Elmah trong ASP.NET
- 19. Cách tắt tự động hoàn thành trong Trình trợ giúp Html của MVC
- 20. Trợ giúp tải lên tệp Spring MVC
- 21. Lỗi ghi nhật ký trong ASP.NET MVC
- 22. Tiêu thụ mã Trợ giúp cho chức năng chọn nhóm trong Asp.net MVC
- 23. Ngăn chặn ASP.NET MVC từ Thay thế khoảng thời gian bằng dấu gạch dưới trong ID Trình trợ giúp Html
- 24. Truy cập các thuộc tính từ Trình trợ giúp tùy chỉnh Html trong asp.net mvc 4 dao cạo
- 25. Có thể tạo ra một ASP.NET MVC tùy chỉnh mạnh mẽ đánh máy trợ giúp HTML?
- 26. Trăn Argparse, xóa danh sách người đăng ký trong menu trợ giúp
- 27. Làm thế nào để sử dụng ASP.NET MVC Html Helpers từ một trợ giúp tùy chỉnh?
- 28. ASP.NET MVC Textarea HTML trợ giúp thêm dòng khi sử dụng AntiXssLibrary
- 29. Cách đăng ký chương trình phụ trợ LLVM mới?
- 30. Có thể đăng ký người trợ giúp cho một mẫu bảng điều khiển duy nhất không?
Không phải là câu hỏi này về ASP.NET MVC và không phải là hình thức web? –
Công cụ xem dao cạo đã được phát hành với MVC 3. Đó là * phiên bản 3 *, như trong hai phiên bản toàn bộ sản phẩm đã được phát hành trước khi Razor được phát triển/bao gồm. Trước Razor, công cụ xem mặc định là ASPX. – sliderhouserules