FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 5842|回复: 5
打印 上一主题 下一主题

[急] 自定义回发如何为动态控件赋值?

[复制链接]
跳转到指定楼层
楼主
发表于 2012-3-9 12:05:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 凤舞天翔 于 2012-3-9 16:59 编辑

就官方示例“自定义回发”为蓝本,增加一个代码生成的控件textbox,如何为它赋值?
代码如下:
custom_postback.aspx文件没有变化。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <ext: PageManager ID="PageManager1" runat="server" />
    <ext:SimpleForm ID="SimpleForm1" runat="server" Width="600px" BodyPadding="5px" EnableBackgroundColor="true"
        Title="简单表单">
        <Items>
            <ext:TextBox ID="TextBox1" runat="server" ShowLabel="false" EmptyText="输入一些文字并按 ENTER 键">
            </ext:TextBox>
            <ext:TextBox ID="TextBox2" runat="server" ShowLabel="false">
            </ext:TextBox>
        </Items>
    </ext:SimpleForm>
    </form>
    <script type="text/javascript">
        function onReady() {
            var textbox1ID = '<%= TextBox1.ClientID %>';
            var textbox1 = Ext.getCmp(textbox1ID);
            textbox1.on("specialkey", function (box, e) {
                if (e.getKey() == e.ENTER) {
                    __doPostBack(textbox1ID, 'specialkey');
                }
            });
        }
    </script>
</body>
</html>

custom_postback.aspx.cx 增加了一个代码生成的控件textbox,在自定义回发中,对它赋值:
protected void Page_Load(object sender, EventArgs e)
        {
            ExtAspNet.TextBox tb = new ExtAspNet.TextBox();
            tb.ID = "TextBox3";
            tb.EmptyText = "代码动态创建的控件";
            SimpleForm1.Items.Add(tb);

            if (!IsPostBack)
            {
            }
            else
            {
                if (Request.Form["__EVENTTARGET"] == TextBox1.ClientID && Request.Form["__EVENTARGUMENT"] == "specialkey")
                {
                    TextBox2.Text = TextBox1.Text;
                    TextBox2.Focus(true);

                    ExtAspNet.TextBox tt = SimpleForm1.FindControl("TextBox3") as ExtAspNet.TextBox;
                    tt.Text = TextBox1.Text;
                }
            }
        }

页面上定义的控件可以得到值,但代码生成的控件(红色部分)得不到值,该如何解决? 请教同仁们。


沙发
发表于 2012-3-9 20:30:52 | 只看该作者
这段后台代码有问题,把动态生成控件放在了!IsPostBack外面,会导致执行多次。后面再找控件时,会不会因为重复创建的原因找到的,不是你看到的那个控件呢?
个人猜想,未验证。{:soso_e124:}
板凳
 楼主| 发表于 2012-3-9 23:37:04 | 只看该作者

RE:

本帖最后由 凤舞天翔 于 2012-3-9 23:38 编辑
dennis 发表于 2012-3-9 20:30
这段后台代码有问题,把动态生成控件放在了!IsPostBack外面,会导致执行多次。后面再找控件时,会不会因为 ...

我也反复测试过,动态代码须放在!ispostback的外面,才能find到控件。
如果页面放一个按钮,把赋值语句放到按钮点击事件里,就可以。
但我现在需要:自定义回发直接赋值给动态控件。我就不知道怎么办了?
还望赐教啊。
地板
发表于 2012-3-10 12:55:33 | 只看该作者
Asp.Net的 动态添加控件一般用于初始化,并且一般放在Page_Init中。如果想在回发事件中显示隐藏控件,可以使用控件的Hidden属性。
5#
发表于 2012-3-10 12:57:06 | 只看该作者
30372245 发表于 2012-3-10 12:55
Asp.Net的 动态添加控件一般用于初始化,并且一般放在Page_Init中。如果想在回发事件中显示隐藏控件,可以 ...

这也是Asp.Net的渲染机制决定的,每次回发页面都会重新渲染一遍,这也是为什么要在Page_Load中通过!IsPostBack逻辑判断的原因
6#
 楼主| 发表于 2012-3-11 14:29:40 | 只看该作者
本帖最后由 凤舞天翔 于 2012-3-11 14:32 编辑

谢谢答复!~我之前也从生命周期考虑过。我把赋值语句放到了Page_LoadComplete里,可行。
不知道还有其他什么更好的方法?

另外还有个疑问(无意中发觉的),就是用一楼的代码,只是在控件动态创建时,给控件的Enabled属性设为false,结果就可以得到值了。
tb.Enabled = false; 只需这一句代码。

能否告知原由。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-6-6 18:02 , Processed in 0.044888 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表