zoukankan      html  css  js  c++  java
  • DataGrid,HeadTemplate and ClientSide Script

    DataGrid真的是一个好东西,不光是方便的解决的数据列表和分页的问题。对于Editable Grid的支持也不错,虽然比起当初我在Asp时代的全部用JavaScript生成的那个Editable Grid的功能差了一些,不过我那个东东的封装可是没有人家这个这么直接。好在DataGrid提供的功能已经能够足够满足大多数的应用。

    Editable Grid 

    HeadTemplate中最让人感觉受不了的就是没有onClick的Server-Side事件,据我所知国人非常喜欢用href的onClick来实现很多的功能,最终选择了来实现对选中的记录的删除,删除本身是很好实现的,问题是我们一般在删除的时候习惯于对用户提示是否删除,而我们知道Server-Side是不可能提供这样的功能的。因此我们必须想办法使用Client-Side的脚本代码。
    问题是这样的Client-Side的代码如何同我们的代码关联起来呢?
    通过查询MSDN,我们知道了四种方法可以实现ClientScript的功能,分别是
    1.GetPostBackEventReference
    2 RegisterArrayDeclaration
    3 RegisterClientScriptBlock
    4 RegisterStartupScript
    其中,GetPostBackEventReference一般在user custom control中使用,我们在这里不做讨论Kaneboy's Blog尚有一个例子,我们着重讨论一下剩余的三个Register函数的用法。
    RegisterArrayDeclaration向客户端声明一个Client Array以便 Client Script使用
    RegisterClientScriptBlockRegisterStartupScript 的区别在于,RegisterStartupScript 一般都只有一行代码,而且RegisterClientScriptBlock将ClientScript放在开始的地方,而RegisterStartupScript 将代码放在结束的位置。

    OK,有了这些知识以后,我们开始下面的代码。首先我们需要为我们的ImageButton增加Attributes,可是我们如何去得到这个ImageButton呢?这个Button是Grid的内部控件,我们在ItemDataBound事件中通过下面的代码得到

            Dim InnerControl As Control

            InnerControl = e.Item.FindControl("delLink")

            If Not InnerControl Is Nothing Then

                Dim InnerButton As ImageButton

                InnerButton = CType(InnerControl, ImageButton)

                InnerButton.Attributes.Add("onclick", "return confirm(确认要删除吗?');")

            End If

    这段代码执行起来没有任何问题,但是这个时候我们自然会有这样的想法,如果这个ClientScript代码非常复杂的话,我们该如何来处理呢?说起来,这个问题其实也很常见,比如我们如果想将最后的一句话修改成为

             InnerButton.Attributes.Add("onclick", "return confirmDel();")

    我们自然会想到 这样的方法,不错这个方法很好,不过别着急。这样的努力是不会成功的,虽然我们把这样的运行的代码另存成HTML以后,我们会发现Js代码按照我们的预期执行了,但是在运行模式下,这样的不会成功的。解释如下:“ASP.Net can only emit code where there is either databinding <%# %>or runat=server. Thus, the "standard processing area" is the area. This is required for ASP.Net to function and therefore only allows dynamic content to be added between the

    tags. ”

    不过既然这样,我们也不要去强求,我们可以利用下面的代码使得我们的工作顺利进行下去:

            Dim scriptFile As System.IO.File

            Dim readStread As System.IO.StreamReader

            readStread = scriptFile.OpenText(Server.MapPath("MemberManage.js"))

            Dim strScript As String

            strScript = readStread.ReadToEnd()

            readStread.Close()

            strScript = " "

            If (Not Page.IsClientScriptBlockRegistered("clientScript")) Then

                Page.RegisterClientScriptBlock("clientScript", strScript)

            End If

     

    Link:http://weblogs.asp.net/asmith/articles/25465.aspx

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    自实现的DNetStopWatch类
    IL Discovery 系列三 《为什么在遍历List<T>对象时同时删除其中项会抛出异常》
    高效的线程安全队列ConcurrentQueue<T>(上)
    .NET中Object.Equals()方法与Object.ReferenceEquals()方法
    麻省理工学院(MIT)的开放课程(OCW)真的不错,其音像资料
    Eclipse快捷键大全
    MyEclipse快捷键大全
    c#单文件上传下载源代码
    Tomcat 配置集锦
    asp.net(C#)多文件上传(源代码)vs2008
  • 原文地址:https://www.cnblogs.com/Athrun/p/553824.html
Copyright © 2011-2022 走看看