<< 比无知更愚昧 | Home | sunshine in my eyes >>
为asp.net控件点击事件添加确认提示

    在aspx页面里, 我们试图在用户点击删除按钮的时候, 提示用户: "是否确认删除?", 我们可以有两种方法解决;

// 正确
<input id="delete" name="delete" type="submit" onclick="return confirm('是否确认删除?');" language="javascript" value="删除" runat="server" />

    上面的写法没有问题, 但是用的是html控件, 感觉有点别扭. 是啊, 有asp:button这个web控件不用, 反而用html控件, 这样总显得有点不够专业, ^_^. 但是如果我们在asp:button里这么写的话, 问题就来了:

// 出错
<asp:button id="delete" text="保存" onclick="return confirm('是否确认删除?')" runat="server" />

    在页面显示示编译器会报错:

编译器错误信息: CS1041: 应输入标识符,“return”是关键字

    但是如果删除"return", 还是会报错:

编译器错误信息: CS1012: 字符文本中字符太多

    为什么会出现这个问题? 我没有仔细想过(年轻人办事总有点毛糙嘛:P), 不过据我猜测, 是web控件的onclick事件, 跟后台处理方法是关联的, 所以不能直接附加客户端脚本. 那么就没办法了, 办法是有的, 呵呵. 我在后台代码的Page_Onload方法里写:

// 正确
this.delete.Attributes.Add( "onclick", "if( !confirm('是否确认删除?') ){ return false; }" );

    为何不直接这么写:

// 逻辑问题
this.delete.Attributes.Add( "onclick", "return confirm('是否确认删除?');" );

    是因为如果web控件需要触发页面验证的时候, 会在页面该input按钮的onclick事件里, 附加上一段验证脚本, 也就是说生成的最终页面html代码看起来可以是这样的:

// 逻辑问题
<input id="delete" name="delete" type="submit" onclick="return confirm('是否确认删除?');if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" value="删除" runat="server" />

    上面脚本的问题就在于, 不论提示时确认还是取消, 都直接return了, 不会继续执行后面的页面验证脚本, 然而页面验证脚本是asp.net引擎在最后生成页面时才附加上去的, 无论如何, 咱们也没办法把脚本写在asp.net引擎生成的脚本后面, 所以我们的逻辑只能这么写, 如果提示时取消, 就return, 如果确认, 就不处理, 留待后面脚本继续执行.

    以上是页面按钮的写法, 适用于asp:button, asp:linkbutton等相当于页面按钮的web控件. 但是在asp:datagrid里, 因为是一个列表, 每行都有相同的控件, 控件名称是不确定的. 这次我们可以直接在页面写js脚本了. 譬如我们的aspgrid的删除列是这样的:

<asp:buttoncolumn headertext="操作" commandname="delete" text="删除" />

    我们在aspx页的html代码里加入如下脚本:

<script language="javascript" type="text/javascript">
function deleted()
{
    if(event.srcElement.innerText=="删除")
        event.returnValue=confirm("确实要删除此记录?");
}
document.onclick=deleted;
</script>

    以上应该有最好的方法, 我只是提出一种可行的实现方法, 呵呵.

Re: 为asp.net控件点击事件添加确认提示
其实我倒是觉得,不是万不得已,没必要使用.net控件。有标准html控件,且逻辑不复杂的时候,最好用html控件。
No TrackBacks for this blog entry.
The TrackBack URL for this blog entry is
http://blog.devep.net/geniusleft/addTrackBack.action?entry=1114062918125

四月 2005
星期一星期二星期三星期四星期五星期六星期日
     1  2  3 
 4  5  6  7  8  9  10 
 11  12  13  14  15  16  17 
 18  19  20  21  22  23  24 
 25  26  27  28  29  30  
三月  |  Today  |  五月
Recent Blog Entries
Recent Responses
Re: blog服务器即将搬迁, 敬请留意
hi,花夫子模板和你的一样,哪有喧宾夺主?是烘云托月。呵呵。你的文很好。

Re: blog样式改版, 感谢dodo创意
作的真不错。。。不过。。。这个blog因为备案的原因,马上就要搬家了。。。新的空间只能支持php.....要换另一套系统了...

Re: 当blog文化成为精英意识
http://www.flickr.com/photos/jianshuo/16026116/in/photostream/

Re: 当blog文化成为精英意识
所谓条条道路通罗马,BLOG的产生提供了另外一条道路,下一条路是什么呢?

Re: 当blog文化成为精英意识
草根力量的发展,终究会占据主流
Other Blogs
Powered by Pebble