前言
在当今快速发展的数字世界中,企业需要采用可靠且可扩展的应用程序来满足不断变化的客户需求。ASP.NET 主机提供了一个理想的平台,可以在云中部署和托管这些应用程序,实现卓越的性能、安全性、可扩展性和成本效益。
什么是 ASP.NET 主机?
ASP.NET 主机是一种专门为托管 ASP.NET Web 应用程序而设计的云计算服务。它提供了一组工具和服务,使开发人员能够轻松地部署、管理和扩展他们的应用程序,而无需管理底层基础设施。
ASP
在ASP.Net中应用Javascript
概要 本文结合示例讲述了在应用程序中如何利用客户端的Javascript脚本提高程序的执行效率并实现更多的功能
一 ASP Net与Javascript
Net是微软公司下一代的战略核心 ASP Net是 Net战略在Web开发方面的具体实现 它继承了ASP的简单性和易用性 同时克服了ASP程序结构化较差 难于阅读和理解的缺点 特别是服务器端控件和事件驱动模式的引入 使得Web应用程序的开发更接近于过去桌面程序的开发
在各种各样介绍ASP Net的文章和书籍中 都把重点放在了服务器控件和 Net Framework SDK上 因为这是ASP Net中最新和最具革命性的改进 与此相反 在过去的Web开发中占据重要地位的客户端脚本Javascript(也包括VBScript)则鲜有提及 似乎有了服务器端程序 已经不需要客户端脚本了 但是 服务器端的程序毕竟需要一次浏览器与Web服务器的交互 对于ASP Net来说 就是一次页面的提交 需要来回传送大量的数据 而很多工作 比如输入验证或者删除确认等 完全可以用Javascript来实现 因此 探讨在ASP Net中如何使用Javascript仍然很有必要
二 Javascript的应用示例
为页面上的某个服务器控件添加Javascript事件
服务器控件最终生成的仍然是普通的HTML 比如<asp textbox>生成input text 表单中的每个HTML控件都有它自己的Javascript事件 比如Textbox有onchange事件 Button有onclick事件 Listbox有onchange事件等 要想为服务器控件添加客户端的事件 需要用到Attributes属性 Attributes属性是所有的服务器控件都有的一个属性 它用来为最终生成的HTML添加自定义的一些标记 假设Web Form上有一个保存按钮btnSave 希望在用户点此按钮时提示用户是否确实要保存(比如一旦保存就无法恢复等) 则应在Page_Load事件中添加如下代码
if not page isPostBack() then
btnSave Attributes Add( onclick Javascript return confirm( Are you sure to save? ) )
要注意的是 return 这是不可省的 否则即使用户点了取消 数据仍然会保存
为Datagrid中的每一行添加Javascript事件
假设Datagrid的每一行有一个删除按钮 希望在用户点此按钮时提示用户是否确实要删除此条记录 以防用户点错了行 或仅仅是无意中点了删除按钮
无论这个删除按钮是什么名字 都不能象上个例子那样直接引用 因为每一行都有这样一个按钮 它们是Datagrid中的子控件 在这种情况下 需要用到Datagrid的OnItemDataBound事件 OnItemDataBound事件发生在Datagrid的每一行数据绑定到Datagrid之后(即一行激发一次) 首先在Datagrid的声明中添加如下代码
…Columns definition here
</asp datagrid> 此处说明OnItemDataBound事件发生时调用ItemDataBound方法 在代码后置文件中添加此方法的定义
Sub ItemDataBound(ByVal sender As Object ByVal e As DataGridItemEventArgs)
If e Item ItemType <> ListItemType Header And e Item ItemType <> ListItemType Footer Then
Dim oDeleteButton As LinkButton = e Item Cells( ) Controls( )
oDeleteButton Attributes( onclick ) = javascript return Confirm ( Are you sure you want to delete & DataBinder Eval(e Item DataItem m_sName ) & ? )
由于Datagrid的标题行和脚注行也会激发此事件 所以首先判断激发此事件的行不是标题行和脚注行 这里假设Delete按钮位于Datagrid的第 列(第一列是 ) 且Datagrid的Datasource中包含名为 m_sName 的列
引用编辑状态下的Datagrid中的控件
Datagrid的内置编辑功能使得当记录的字段较少时的一种编辑方法 用户不必进入一个单独的页面编辑记录 而是直接点编辑按钮就可以使当前行进入编辑模式 而另一方面 有一些Javascript程序需要引用控件的名称 比如 很多程序在需要用户输入日期时都提供一个日期控件以保证日期格式的合法性 当用户点控件图标时弹出一个新窗口供用户选择日期 此时需要把显示日期的文本框的ID提供给新窗口 以便当用户选择日期后值可以回填到文本框中
如果是普通的服务器文本框控件 它的ID与生成的HTML输入框的ID是相同的 但是在Datagrid的编辑状态下 两个ID并不相同(其道理与上例相同) 这就需要用到控件的ClientID属性
Protected Sub ItemEdit(ByVal source As Object ByVal e As System Web UI WebControls DataGridCommandEventArgs)
Dim sDateCtrl as string
sDateCtrl = grd Items (e Item ItemIndex) Cells( ) FindControl( txtDate ) ClientID
这里假设ItemEdit方法是Dategrid的OnItemEdit事件处理程序 同时在Datagrid的第三列包含一个名为txtDate的服务器文本框控件
引用ASP Net自动生成的Javascript程序
所谓的 服务器端控件 是针对开发人员的 在生成的HTML源程序中并没有服务器和客户端之分 都是标准的HTML DHTML和Javascript 它之所以能响应用户的输入是因为每个控件的事件处理程序最终都生成了一段脚本 此脚本重新提交页面使得Web Server有机会再次响应并作出处理 通常情况下我们不必知道此脚本是什么也不必直接调用此脚本 但在有些情况下 适当地调用此脚本可以简化许多工作 请看下面两个例子
● 点Datagrid的任一位置以选中一行
Datagrid提供了一种内置的选择按钮 当点此按钮时选中当前行(可以设置SelectedItemStyle属性以使当前行有不同的外观) 但用户可能更习惯于点任意一个位置都能选中一行 如果完全自己实现这个功能相当烦琐 一个好的思路是添加一个选择按钮 但使此列隐藏 当点任一行时调用此按钮产生的Javascript脚本
Sub Item_Bound(ByVal sender As Object ByVal e As DataGridItemEventArgs )
Dim itemType As ListItemType
itemType = CType(e Item ItemType ListItemType)
If (itemType <> ListItemType Header) And _
(itemType <> ListItemType Footer) And _
(itemType <> ListItemType Separator) Then
Dim oSelect As LinkButton = CType(e Item Cells( ) Controls( ) LinkButton)
e Item Attributes( onclick ) = Page GetPostBackClientHyperlink (oSelect )
这里假设选择按钮位于第 列 e Item代表了一行 从生成的HTML上看就是在每个<tr>里增加了一个onclick事件 Page GetPostBackClientHyperLink方法返回页面中LinkButton控件产生的客户端脚本 其中第一个参数是Linkbutton控件 第二个参数是传递给此控件的参数 通常为空 如果不是LinkButton控件 有一个类似的函数GetPostBackClientEvent 读者可以参考MSDN
● 服务器产生的脚本与手工添加的脚本冲突
服务器控件的服务器事件一般对应到客户端控件的相应事件 如Dropdownlist的SelectedIndexChanged事件对应HTML <Select>的onchange事件 如果你要手工增加一个onchange事件 则会在客户端产生两个onchange 浏览器就会忽略掉一个 比如用户希望每当改变了Dropdownlist中的选项就保存到数据库(虽然不是很常见 但确实有这种需要) 但同时还希望提醒用户是否确实要做保存 显然 保存的代码应该放在SelectedIndexChanged事件中 而提醒的工作应该手工加一段onchange事件 结果就是两个onchange只能执行一个 正确的方法应该是添加一个不可见的保存按钮 在手工增加的onchange事件中调用此按钮生成的程序
Page_Load方法如下
Dim sCmd as string
sCmd=Page GetPostBackClientHyperlink(btnUpdate )
If not page isPostback then
Dropdownlist Attributes add( onchange ConfirmUpdate( & sCmd & ) )
ConfirmUpdate函数如下
function ConfirmUpdate(cmd){
if confirm( Are you sure to update? )
这里利用了Javascript eval函数来调用一个字符串中包含的命令 需注意的是包含命令的字符串不能用单引号括起来 因为自动生成的脚本中包括单引号 所以这里用两个双引号表示字符串本身的双引号
三 结束语
lishixinzhi/Article/program/net//
不走寻常路 设计ASP.NET应用程序的七大绝招[1]
随着微软 NET的流行 ASP NET越来越为广大开发人员所接受 作为ASP NET的开发人员 我们不仅需要掌握其基本的原理 更要多多实践 从实践中获取真正的开发本领 在我们的实际开发中 往往基本的原理满足不了开发需求 我们更多的要积累一些开发技巧 本文就向大家介绍一些实用技巧 希望对大家的开发有所裨益
~ 的用法
一般的情况下 我们是使用 / / 这样的相对路径来确定和规划我们的资源(比如图片 资源文件) 但这种方式下在我们部署应用的时候 可能会出错 另外对于 ascx的控件中如果包含了一个图片 而这个控件被我们在不同层次的两个目录的aspx文件分别引用时 问题就会出现了
~/image/about bmp 是一种非常好的方法 它以Web应用程序的根目录为起始点 这样使得比你使用 /image/about bmp这样的方式要更加灵活和方便 有一点不好 是这种方式是在ASP NET运行时动态解析的 所以在IDE设计模式中 你可能不能预览它
在刷新和提交页面后 保存你的页面滚动条的位置
经常有这样的情况 我们需要用户提交一个表单 但是表单中有超过 +个?控件或文本框要填写 也就是说用户需要拉动IE的滚动条才能够填得完 那么假如用户正在可见IE范围的 / 处 选择了一个组合框的值 很不幸组合框是服务器端的 那么也就意味着页面会提交一次 而当用户再看见刷新过的页面时 页面确定在 / 的地方也就是显示在页面最开始的地方 用户只有拖动鼠标 然后接着刚刚的地方再填写剩下的 个控件 很不幸 个控件又需要他选择一下?
用下面的方法可以很快地确定和记住你提交前的位置
网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element 不过他使用了Web Behavior这意味着你需要使用一个 htc文?lt;/P>
Private Sub RetainScrollPosition()
Dim saveScrollPosition As New StringBuilderDim setScrollPosition As New StringBuilder
RegisterHiddenField( __SCROLLPOS )saveScrollPosition Append( <script language= javascript > )saveScrollPosition Append( function saveScrollPosition() { )saveScrollPosition Append( document forms[ ] __SCROLLPOS value = thebody scrollTop; )saveScrollPosition Append( } )saveScrollPosition Append( thebody onscroll=saveScrollPosition; )saveScrollPosition Append( </script> )
RegisterStartupScript( saveScroll saveScrollPosition ToString())
If (Page IsPostBack = True) Then
setScrollPosition Append( <script language= javascript > )setScrollPosition Append( function setScrollPosition() { )setScrollPosition Append( thebody scrollTop = & Request( __SCROLLPOS ) & ; )setScrollPosition Append( } )setScrollPosition Append( thebody onload=setScrollPosition; )setScrollPosition Append( </script> )RegisterStartupScript( setScroll setScrollPosition ToString())
Private Sub Page_Load(ByVal sender As System Object ByVal e As System EventArgs) Handles MyBase LoadRetainScrollPosition()End Sub
DataList使用不同风格的模板
这招也非常实用 你可以制作两个不同的模板或表现形式 分别以 ascx控件的形式保存 运行时根据某个条件动态的选择使用其中的一个模板 另外ScottGu认为ItemDataBound方法也可以定制你显示的表现 比如加亮某个元素或是加一个促销广告图等等
Dim theme As Stringtheme = DropDownList SelectedValue
DataList ItemTemplate = Page LoadTemplate(theme & ascx ) CoolDataList DataSource = DSDataList DataBind()
设置服务器端控件的焦点
Private Sub SetFocus(ByVal controlToFocus As Control)Dim scriptFunction As New StringBuilderDim scriptClientId As String
scriptClientId = controlToFocus ClientIDscriptFunction Append( <script language= javascript > )scriptFunction Append( document getElementById( & scriptClientId & ) focus(); )scriptFunction Append( </script> )RegisterStartupScript( focus scriptFunction ToString())End Sub
Private Sub Page_Load(ByVal sender As System Object ByVal e As System EventArgs) Handles MyBase LoadIf (Page IsPostBack = False) ThenSetFocus(TextBox )End IfEnd Sub
lishixinzhi/Article/program/net//
ASP.NET是什么
又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。
基于 Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。
就是属于WebForm,也就是平时说的B/S模式的开发。
而WinForm就是属于C/S模式。
有很多种语言组成,比如C#、 、J#、Jsript、Managed C++,但是都是运行在 FrameWork Run Time底下的。
可以用C#或来开发。
编译后形成CLR,通过服务器的IIS+ FrameWork再次编译来运行。
扩展资料
和ASP的区别:
和ASP的最大区别在于编程思维的转换以及功能的增强。
一、ASP使用VB/JS这样的弱类型、面向结构的脚本语言混合html来编程,而非面向对象,这就明显产生以下几个问题:
1、代码逻辑混乱,难于管理。
2、代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,代码重用性差。
3、弱类型造成潜在的出错可能。
因此在功能方面ASP同样存在问题:
1、功能太弱,一些底层操作只能通过组件来完成。
2、缺乏完善的纠错/调试功能。
二、理论上可以使用任何编程语言包括C#、、JS、、J#、Managed C++等等,最合适的编程语言还是MS为 Frmaework专门推出的C#。
优点如下:
1、是面向对象的编程语言,简单易学。
2、具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,封装性使得代码逻辑清晰,并且应用到上就可以使业务逻辑和Html页面分离;继承性和多态性使得代码的可重用性大大提高