- 浏览: 45893 次
- 性别:
- 来自: 武汉
-
文章分类
最新评论
-
胡火云:
我的回答是:正常。但不知为什么会出现这些信息,而这些信息要说明 ...
CL编辑器问题-出现这些字符是正常的吗? -
胡火云:
回答:这是对的,也是消息队列。
系统内部给出
声明结构体
高效管理ASP.NET的JavaScript库
简介
对于ASP.NET开发人员来说,管理项目中的JavaScript都很随意:
我想这很大程度上可能是因为网上没有如何妥善处理ASP.NET中JavaScript的可靠信息。此文的目的就是提供一种最佳方案,用于管理ASP.NET中的JavaScript。该方案将能解决以下问题:
- 内联JS:把JS直接放在页面中将导致页面臃肿不堪。
- 发布JS:经常忘记发布JS文件。
- 错误引用:在其它Web程序中引用JS时经常失败。
- 依赖性:需要记住JS文件中错综复杂的依赖关系。
- 无效引用:页面上引用的JS从来没有被用到。
- HTTP/HTTPS:跨HTTPS页面引用HTTP的JS。
- 重构:重构一个新版本将花费大量时间。
- 冗余:多次引用统一个JS文件。
预备知识
确保已安装Visual Studio 2010。Express版可能不支持此文涉及到的一些概念。
概述
大部分上述问题是由把JS或JS文件引用直接放到ASPX页面引起的。对几乎所有上述问题的解决方法是使用ASP.NET的内置功能来嵌入JS文件到一个DLL,然后动态引用这些文件。本文将演示这些功能,以及一些充分使用它们的技巧。接下来我们将逐步介绍该如何实现。
开始
第一步,启动Visual Studio 2010,并新建一个名为ParchmentPurveyor的
空Web程序。
接下来添加一个窗体:Default.aspx,并添加一些简单的HTML代码。大致如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ParchmentPurveyor.Default" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Parchment Purveyor</title> </head> <body> <form id="form1" runat="server"> <h1>Parchment Purveyor</h1> <p>Paper for printers, painting, publication, paper planes, and plenty of other plebeian projects!</p> </form> </body> </html>
添加JS
不同于在站点中添加JS文件,我们新建一个项目,用于包含我们所有的JS文件。在解决方案中添加一个新的类库项目JavaScriptLibrary:
项目添加后删除Class1.cs文件,右键项目,选择添加文件夹,并命名为JavaScript,然后在该文件夹中添加两个JS文件,分别为ShowMessage.js和GreetUser.js,下一步,在项目中添加一个类JavaScriptHelper(注意不要放到
JavaScript目录下),现在解决方案目录结构如下:
接下来编写JS,在ShowMessage.js中添加如下代码:
function ShowMessage(msg) { alert("Message From Website: " + msg); }
在GreetUser.js文件中添加如下代码:
function GreetUser() { ShowMessage("Greetings and Salutations!"); }
注意,GreetUser()依赖于ShowMessage()。
嵌入JS文件
相比把JS文件发布到站点,我们更乐于把它们嵌入到DLL。这样子,如果DLL被发布到站点,那么所有JS文件也被自动发布。做到一点很简单,我们只需要右键JS文件,打开属性页,为“生成操作”选择“嵌入资源”即可,如下:
在确定JS文件嵌入DLL后,你需要使它们能够被Web用户访问。为此,需要为项目JavaScriptLibrary添加
System.Web的引用:
然后编辑JavaScriptHelper.cs,添加如下代码:
using System.Web.UI; [assembly: WebResource("JavaScriptLibrary.JavaScript.ShowMessage.js", "application/x-javascript")] [assembly: WebResource("JavaScriptLibrary.JavaScript.GreetUser.js", "application/x-javascript")]
这样就能保证Web用户通过客户端访问嵌入式JS文件了。
引用嵌入式JS文件
现在你已嵌入了JS文件,并能通过客户端电脑访问它们。在使用的时候,你必须在页面上引用它们。为此,需要对JavaScriptHelper类做如下修改:
using System; using System.Web.UI; [assembly: WebResource("JavaScriptLibrary.JavaScript.ShowMessage.js", "application/x-javascript")] [assembly: WebResource("JavaScriptLibrary.JavaScript.GreetUser.js", "application/x-javascript")] namespace JavaScriptLibrary { /// <summary> /// 帮助页面引用嵌入式JS文件 /// </summary> public class JavaScriptHelper{ #region 静态字段 private const string NAME_SHOW_MESSAGE = "JavaScriptLibrary.JavaScript.ShowMessage.js"; private const string NAME_GREET_USER = "JavaScriptLibrary.JavaScript.GreetUser.js"; #endregion #region 公共方法 /// <summary> /// 在页面上引用ShowMessage.js文件 /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> public static void Include_ShowMessage(ClientScriptManager manager){ IncludeJavaScript(manager, NAME_SHOW_MESSAGE); } /// <summary> /// 在页面上引用GreetUser.js文件 (包括所有依赖文件) /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> public static void Include_GreetUser(ClientScriptManager manager){ //依赖(ShowMessage.js). Include_ShowMessage(manager); //引用 GreetUser.js. IncludeJavaScript(manager, NAME_GREET_USER); } #endregion #region 私有方法 /// <summary> /// 在页面上引用指定的嵌入式js文件 /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> /// <param name="resourceName">用于标示嵌入式JS文件的名字</param> private static void IncludeJavaScript(ClientScriptManager manager, string resourceName){ var type = typeof(JavaScriptLibrary.JavaScriptHelper); manager.RegisterClientScriptResource(type, resourceName); } #endregion } }
IncludeJavaScript()是关键所在。它通过调用
RegisterClientScriptResource()确保为嵌入式JS文件获取一个脚本标签。
Include_GreetUser()调用了
IncludeJavaScript(),同时也调用了
Include_ShowMessage()(用于处理依赖关系)。因此,任何页面在引用
GreetUser()时也将引用
ShowMessage()。
现在我们有了可用的类,接下在让我们在Default.aspx页面中试用它。首先在站点ParchmentPurveyor中添加对
JavaScriptLibrary的引用:
接下来我们需要修改引用JS页面的后台代码。
using System; using System.Web.UI; namespace ParchmentPurveyor { public partial class Default : System.Web.UI.Page{ protected override void OnPreRender(EventArgs e){ base.OnPreRender(e); JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript); } } }
最后,还有一件事要做——从页面调用GreetUser()。为此,我们需要在页面中添加如下JS(我选择把它添加到<head>标签中):
<head runat="server"> <title>Parchment Purveyor</title> <script type="text/javascript"> window.onload = function () { GreetUser(); }; </script> </head>
好了,除了还有一些琐碎的事要处理外,我们已基本完成。在处理那些之前,让让我们看一下成果。编译整个解决方案—〉右键在浏览器中查看Default.aspx页面:
右键查看页面源码,你可能看到如下内容(src="/WebResource.axd.."部分有删减):
<html xmlns="http://www.w3.org/1999/xhtml"> <head><title> Parchment Purveyor </title> <script type="text/javascript"> window.onload = function () { GreetUser(); }; </script> </head> <body> <form method="post" action="Default.aspx" id="form1"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="..." /> </div> <script src="/WebResource.axd?d=fslk3GLsk3Slek&t=1234" type="text/javascript"></script> <script src="/WebResource.axd?d=fglk3kSl3LS5&t=5678" type="text/javascript"></script> <h1>Parchment Purveyor</h1> <p>Paper for printers, painting, publication, paper planes, and plenty of other plebeian projects!</p> </form> </body> </html>
请注意引用“WebResource.axd”的两个<script>标签。它提供了让客户端访问嵌入式信息的基本功能。注意,第一个<script>标签注册了ShowMessage(),第二个
<script>标签注册了GreetUser
()。在你的JS库中调用
Include_GreetUser()时,上面所有标签都会被引入到页面中。
后期引用
有时上面技术可能会引用JS文件失败。例如当我使用第三方工具工作时,就可能在渲染阶段阻止调用.NET代码。当你在渲染阶段引用那些函数时,脚本标签不会被插入页面。这是因为页面一开始就已经呈现为HTML。对这个问题的解决方法是构造一个替换函数,并在HTML底部附近插入脚本标签。我称之为“后期引用”,为此,需要对JavaScriptHelper做一些修改:
using System; using System.Web; using System.Web.UI; [assembly: WebResource("JavaScriptLibrary.JavaScript.ShowMessage.js", "application/x-javascript")] [assembly: WebResource("JavaScriptLibrary.JavaScript.GreetUser.js", "application/x-javascript")] namespace JavaScriptLibrary { /// <summary> /// 帮助页面引用嵌入式JS文件 /// </summary> public class JavaScriptHelper { #region Constants private const string TEMPLATE_SCRIPT = "<script type=\"text/javascript\" src=\"{0}\"></script>\r\n"; private const string NAME_SHOW_MESSAGE = "JavaScriptLibrary.JavaScript.ShowMessage.js"; private const string NAME_GREET_USER = "JavaScriptLibrary.JavaScript.GreetUser.js"; #endregion #region 公共方法 /// <summary> /// 页面引用ShowMessage.js文件 /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> /// <param name="late">是否在HTML底部引用JS</param> public static void Include_ShowMessage(ClientScriptManager manager, bool late = false) { IncludeJavaScript(manager, NAME_SHOW_MESSAGE, late); } /// <summary> /// 页面引用GreetUser.js文件(包括所有依赖文件) /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> /// <param name="late">是否在HTML底部引用JS</param> public static void Include_GreetUser(ClientScriptManager manager, bool late = false) { // 依赖 (ShowMessage.js). Include_ShowMessage(manager, late); // 引用 GreetUser.js. IncludeJavaScript(manager, NAME_GREET_USER, late); } #endregion #region 私有方法 /// <summary> /// 页面引用指定的嵌入式JS文件 /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> /// <param name="resourceName">标示嵌入式JS文件的名字</param> /// <param name="late">是否在HTML底部引用JS</param> private static void IncludeJavaScript(ClientScriptManager manager, string resourceName, bool late) { var type = typeof(JavaScriptLibrary.JavaScriptHelper); if (!manager.IsStartupScriptRegistered(type, resourceName)) { if (late) { var url = manager.GetWebResourceUrl(type, resourceName); var scriptBlock = string.Format(TEMPLATE_SCRIPT, HttpUtility.HtmlEncode(url)); manager.RegisterStartupScript(type, resourceName, scriptBlock); } else { manager.RegisterClientScriptResource(type, resourceName); manager.RegisterStartupScript(type, resourceName, string.Empty); } } } #endregion } }
为每个方法添加一个参数late。该参数默认值为false,因此这些方法依旧可以按照原有方式调用。该参数为false表示原有行为不变,为true时将导致在HTML结尾部分引用脚本段。可能注意到,在late=false时,我仍然调用了RegisterStartupScript(),但传入了一个空字符串(所以不会在HTML插入任何内容)。完成后IsStartupScriptRegistered()将会返回正确值。这样,即使在late被置false后调用了其中的一个函数,又把late置为true,JS也不会被多次引用。如果要看效果,注释掉后台代码OnPreRender(),并在页面中做如下修改:
<body> <form id="form1" runat="server"> <h1>Parchment Purveyor</h1> <p>Paper for printers, painting, publication, paper planes, and plenty of other plebeian projects!</p> <% // This gets called during the render stage. JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript, true); %> </form> </body>
在运行程序时,如果观察页面源码,你会发现这将调用HTML底部<script>标签引用的函数。
外部JS
到目前为止,我只是演示了如何引用嵌入式JS。然而,有时候会需要联接到外部JS文件。为此,需要在JavaScriptHelper添加一个新函数:
/// <summary> /// 在页面里引用指定的外部JavaScript文件 /// </summary> /// <param name="page">当前页面</param> /// <param name="key">唯一标示外部JavaScript文件的名字</param> /// <param name="httpUrl">外部JavaScript文件的URL地址</param> /// <param name="httpsUrl">启用SSL时外部JavaScript文件的URL地址</param> /// <param name="late">是否需要在HTML下面引用JavaScript</param> private static void IncludeExternalJavaScript(Page page, string key, string httpUrl, string httpsUrl, bool late) { var manager = page.ClientScript; var type = typeof(JavaScriptLibrary.JavaScriptHelper); bool isStartupRegistered = manager.IsStartupScriptRegistered(type, key); bool isScriptRegistered = manager.IsClientScriptIncludeRegistered(type, key); if (!(isStartupRegistered || isScriptRegistered)) { string url; if (page.Request.Url.Scheme.ToLower() == "http") { url = httpUrl; } else { url = httpsUrl; } if (late) { manager.RegisterStartupScript(type, key, string.Format(TEMPLATE_SCRIPT, HttpUtility.HtmlEncode(url))); } else { manager.RegisterClientScriptInclude(type, key, url); } } }
private const string NAME_JQUERY = "jQuery"; private const string URL_JQUERY = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js"; private const string URL_JQUERY_HTTPS = "https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js"; /// <summary> /// 页面引用jQuery.js /// </summary> /// <param name="page">当前页面.如果传入为null,则使用HTTP上下文的当前</param> /// <param name="late">是否需要在HTML下面引用JavaScript</param> public static void Include_jQuery(Page page,bool late=false) { if (page == null) page = (Page)HttpContext.Current.Handler; IncludeExternalJavaScript(page,NAME_JQUERY,URL_JQUERY,URL_JQUERY_HTTPS,late); }
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); JavaScriptLibrary.JavaScriptHelper.Include_jQuery(Page); JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript); }
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js" type="text/javascript"></script>
添加新的JS文件
一旦所有内容完成部署,在需要添加新的JS文件时,只需要几步即可完成,如下:
- 在JavaScript目录中添加js文件。引用外部js文件跳过该步骤;
- 设置“生成操作”为“嵌入资源”。引用外部js文件跳过该步骤;
- 添加assembly属性表示js文件为Web资源。引用外部js文件跳过该步骤;
- 在
JavaScriptHelper类中添件一个引用JS文件的函数;
- 从页面,控件或母版页上调用你创建的函数;
不引用JS文件
以上所做都是为了引用JS文件,但也有时候你可能不需要引用JS文件。例如,在使用第三方控件库时,它们可能通过其他方式引用了JS,这时唯一阻止某一JS文件被两次引用的方法是通过你的代码消除重复引用(由第三方库帮你引用,不需要重复引用)。这可以通过在JavaScriptHelper增加额外的函数
实现。在实现之前,先让我们演示一下这些技术应用的场景。假设你的第三方控件InlineGreeting.ascx引用了jQuery,其内容大致如下:
<%@ Control Language="C#" %> <%-- This is a bad way to do things, but we can luckily overcome this obstacle. --%> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js"></script> <script type="text/javascript"> $(document).ready(function() { $("#lblGreeting").text("Hello"); }); </script> <p> <label id="lblGreeting"></label> </p>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Hello.ascx.cs" Inherits="ParchmentPurveyor.Hello" %> <script type="text/javascript"> $(document).ready(GreetUser); </script>
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript); JavaScriptLibrary.JavaScriptHelper.Include_jQuery(Page); }
现在,如果在Default.aspx中引用上述用户控件,jQuery将会被引用两次(第三方一次,我们一次)。为避免此类情况发生,我们将在JavaScriptHelper类中添加两个方法,ExcludeJavaScript()和Exclude_jQuery():
private const string NAME_DUMMY_FILE = "JavaScriptLibrary.JavaScript.DummyFile.js"; /// <summary> /// 该页面排除jQuery.js /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> public static void Exclude_jQuery(ClientScriptManager manager) { ExcludeJavaScript(manager, NAME_JQUERY); } /// <summary> /// 注册一个虚假的脚本来阻止包含真实的JavaScript /// </summary> /// <param name="manager">通过Page.ClientScript访问</param> /// <param name="key">唯一标示JavaScript文件的名字</param> private static void ExcludeJavaScript(ClientScriptManager manager, string key) { var type = typeof(JavaScriptLibrary.JavaScriptHelper); var url = manager.GetWebResourceUrl(type, NAME_DUMMY_FILE); manager.RegisterStartupScript(type, key, string.Empty); manager.RegisterClientScriptInclude(type, key, url); }
注意,我们定义了一个新的常量NAME_DUMMY_FILE。上面函数假定我们按照上述步骤在JavaScript文件夹里添加了一个空JS文件,并嵌入了它。这个空虚拟JS文件可以引用在任何我们想不引用JS文件的地方。为阻止我们的库引用jQuery只需要调用在Default.aspx页面的Page_Load()中调用Exclude_jQuery():
protected void Page_Load(object sender, EventArgs e) { //我们通过第三方控件引用了jQuery,那么将避免再一次引用 JavaScriptLibrary.JavaScriptHelper.Exclude_jQuery(Page.ClientScript); }
现在我们要做的是修改Default.aspx引用InlineHello.ascx和Hello.ascx,结果如下:
... <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Parchment Purveyor</title> <script type="text/javascript"> // window.onload = function () { GreetUser(); }; </script> </head> <body> <form id="form1" runat="server"> <div> <h1>Parchment Purveyor</h1> <p>Paper for printers, painting, publication, paper planes, and plenty of other plebeian projects!</p> <% // 这在渲染阶段调用 JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript, true); %> </div> <%-- An inline greeting (pretend this comes from a third-party control library. --%> <greet:InlineHello ID="InlineHello1" runat="server" /> <%-- Our jQuery greeting. --%> <greet:Hello runat="server" /> </form> </body> </html>
现在我们已清楚在调用Include_jQuery()之前先调用Exclude_jQuery(),就能够阻止我们的JS库引用jQuery.js文件。这就是说jQuery只会被我们的第三方控件引用。大多数时候这种情况可以避免。然而,有时候不可避免,这时该技术也可以让我们的HTML更加干净整洁。
你都有哪些收获?
经过这些工作,依旧有同样的HTML输出,你可能会问“通过添加这些额外的代码,我获得了什么?”。那么这里就列出几点:
- 内联JS:通过避免把JS直接内联到页面,减小了页面尺寸。
- 发布JS:当你发布Web站点时,你不需要发布引用的JS文件,只发布DLL就足够了。
- 错误引用:即使改变了程序路径,你也不用为修改JS路径担忧。
- 依赖性:文件依赖自动管理。如果你引用了GreetUser.js文件,那么ShowMessage.js文件会自动被引用。
- 无效引用:除非你调用的函数引用了它,否则不会有JS加载到页面。这将避免页面上出现无用的JS(潜在的加快了页面载入时间)。
- HTTP/HTTPS:脚本标记的代码输出与协议无关,因此协议对所有页面一样。
- 重构:如果你想使用一个不同版本的脚本,你只需要在一个地方修改它。例如,如果你决定切换到CDN版本的jQuery,而不是你自己承载,这可能非常有用。更新一个新版本的jQuery时也非常有用。
- 冗余:不管你在方法中引用多少次,该脚本标签仅会在页面上本引用一次。
相关推荐
2. 集成库和框架:工具可能预装了流行的JavaScript库,如jQuery或AngularJS,使开发者能方便地利用这些库的功能。 3. 异步通信支持:通过集成对AJAX的支持,工具可以帮助开发者轻松实现服务器和客户端的数据交换,...
9. **系统控制**:Asp.Net可以通过System.Diagnostics命名空间进行系统级的控制,如进程管理和调试,以及使用AppDomain进行应用程序域的管理和隔离。 10. **图像和多媒体**:Asp.Net支持处理图像和多媒体内容,可以...
ASP.NET 是一种由微软开发的用于构建Web应用程序的框架,它建立在.NET Framework之上,提供了高效、安全且可扩展的平台。此课件是针对ASP.NET技术的全面介绍,涵盖了从基础到高级的各种主题,旨在帮助学习者深入理解...
ASP.NET是由微软开发的一个用于构建Web应用程序的框架,它提供了丰富的服务器控件、事件驱动模型以及内置的安全性、状态管理和缓存机制。在ASP.NET中,我们通常使用C#或VB.NET作为编程语言,开发基于HTTP的应用程序...
FineUI 是一款专为 ASP.NET 平台设计的专业控件库,它基于流行的 JavaScript 框架 ExtJS 构建,旨在为 ASP.NET 开发者提供强大而易用的界面组件。这款控件库在设计时充分考虑了 ASP.NET 的开发模式和习惯,确保...
随着前端开发复杂性的增加,许多JavaScript框架和库应运而生,如React,Angular,Vue.js等,它们提供了组件化开发、状态管理等高级特性,为Asp.net开发带来更多可能性。 总结,JavaScript在Asp.net中的应用不仅限于...
总的来说,这个"图书管理系统 c# asp .net 图书管理系统 网页"项目,利用C#和ASP.NET的强大功能,为图书馆提供了一套高效、便捷的数字化管理工具,提高了图书管理的效率,同时也提升了用户的借阅体验。通过深入学习...
在本文中,我们将深入探讨如何在C# ASP.NET与JavaScript环境中捕获鼠标左右键的点击事件,以及如何实现网页窗体的自动关闭功能。这些技术对于网页开发人员来说至关重要,尤其是在构建交互性强的Web应用程序时。 ...
【ASP.NET简单宿舍管理系统】是一个基于B/S...总的来说,"asp.net 简单宿舍管理系统"是一个综合运用了ASP.NET、C#和SQL Server技术的Web应用实例,实现了宿舍管理的数字化和网络化,为学校提供了方便、高效的管理工具。
【ASP.NET Web 文件管理器详解】 ASP.NET Web 文件管理器是一种基于ASP.NET技术构建的用于在Web环境中管理和操作文件的应用程序。它允许用户通过浏览器界面浏览、上传、下载、删除、重命名、复制和移动服务器上的...
ASP.NET是Microsoft推出的一种Web应用程序框架,它构建在.NET Framework之上,为开发者提供了丰富的功能和高效的性能,尤其适合用于开发企业级的后台管理系统。 【标签】: 1. 毕业设计: 通常,这样的项目可能是...
【ASP.NET BBS论坛管理系统详解】 ASP.NET 是微软公司推出的一种Web应用程序开发框架,它基于.NET Framework,提供了高效、安全且可扩展的平台,用于构建动态网站、Web应用和服务。在本项目“BBS论坛管理系统”中,...
综上所述,ASP.NET为开发者提供了灵活性,无论你偏好哪种语言,都可以在同一个平台上构建高效、稳定的Web应用程序。理解这三种语言的异同,有助于你做出最适合项目需求的选择,并提高开发效率。通过深入学习和实践,...
ASP.NET仓库管理信息系统源码是一套完整的仓储管理解决方案,它基于微软的.NET框架,利用Visual Studio开发环境构建。这个系统提供了全面的库存控制和管理功能,对于初学者和专业人士来说,都是一个很好的学习资源,...
ASP.NET的核心优势在于其强大的服务器控件、事件驱动模型以及自动页面状态管理,使得开发过程更为直观和高效。 在创建学生信息管理系统时,ASP.NET的Web Forms模式通常会被采用。Web Forms允许开发者通过拖放控件和...
综上所述,基于ASP.NET的酒店管理系统结合了ASP.NET的强大功能和酒店业务的特定需求,实现了高效、安全且用户体验良好的在线预订和管理平台。通过深入学习和实践,开发者可以进一步提升自己的技能,适应更多类似项目...
在这个物业管理系统的源码中,开发者利用ASP.NET的强大功能,构建了一个高效且功能丰富的管理平台。以下将详细介绍该物业管理系统的相关知识点。 1. **ASP.NET框架**:ASP.NET是.NET框架的一部分,提供了多种开发...
在这个“Asp.net 做的面试管理系统”中,开发者利用Asp.net的强大功能,结合C#编程语言,构建了一个集成了多种特性的系统,旨在提供高效的面试流程管理。 首先,系统的开发语言C#是.NET框架的主要编程语言,它支持...