【问题标题】:How to update user control in UpdatePanel?如何在 UpdatePanel 中更新用户控件?
【发布时间】:2013-01-23 19:37:03
【问题描述】:

我想刷新 UpdatePanel 中的用户控件,但我也想用不同的属性值刷新它。

<asp:UpdatePanel runat=server ID=up1>
<Triggers>
            <asp:AsyncPostBackTrigger controlid="but01" eventname="Click" />
        </Triggers>
<ContentTemplate>
<asp:Button runat="server" Text="Test" ID="but01"  />   
<UC:Uc runat=server ID="Uc1" />
</ContentTemplate>
</asp:UpdatePanel>



Codebehind for but01 click is
void but01_Click(object sender, EventArgs e)
{

this.Uc1.ID = 1;
this.Uc1.Length = 50;
}

我测试了这段代码,正在刷新用户控件,但没有应用新值 ID=1、Length=50。

后面的控制代码比较简单

namespace Admin.Web.Controls
{

    public partial class Uc1 : System.Web.UI.UserControl
    {

        private string p_to;
        private string p_from;
        private string p_subject;
        private string p_body; 
        private string p_priority;
    }


        protected void Page_Load(object sender, EventArgs e)
        {

            this.txtFrom.Text = p_from;
            this.txtTo.Text = p_to;
            this.txtSubject.Text = p_subject;
            this.txtBody.Text = p_body;

        }

        public string Subject
        {
            get
            {
                return p_subject;
            }
            set
            {
                p_subject = value;
            }
        }

        public string From
        {
            get
            {
                return p_from;
            }
            set
            {
                p_from = value;
            }
        }

        public string To
        {
            get
            {
                return p_to;
            }
            set
            {
                p_to = value;
            }
        }

        public string Body
        {
            get
            {
                return p_body;
            }
            set
            {
                p_body = value;
            }
        }

}

ascx 标头是

<%@ Control Language="c#" Inherits="Admin.Web.Controls.Uc1" AutoEventWireup="true" Codebehind="Uc1.ascx.cs"  %> 

当我在页面加载期间从 aspx 页面启动用户控制时,一切正常。在从控制面板回发时,刷新用户控件(使用标签 + 时间检查),但没有值传递给用户控件。

【问题讨论】:

  • 你能贴出用户控件的代码吗?至少处理 Length 和 ID 在此上下文中的含义的部分,以及可能也更改这些值的任何代码隐藏代码。
  • @AnnL。我已经在代码后面发布了代码。
  • 在用户控件中看不到对 Length 属性的引用。或者您的意思是您正试图以同样的方式使用这些其他属性?
  • 我也是这样用的

标签: asp.net user-controls updatepanel


【解决方案1】:

删除触发器标签

http://msdn.microsoft.com/en-us/library/Bb399001(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

或

将 asp:Button 移到 UpdatePanel 之外。

http://msdn.microsoft.com/en-us/library/Bb399001(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-5

更新:

请将控件的setter和getter设为-

public string Subject
{
   get  { return txtSubject.Text; }
   set  { txtSubject.Text = value; }
}

【讨论】:

  • 没有任何区别
  • 请查看我更新的答案。按照我建议的方式设置自定义控件中的所有属性后,它应该可以工作。请确保but01点击事件附加到but01_Click。
  • 实际上,你是对的 - 属性必须直接链接到控件(txtSubject),并且它不允许将值分配给本地变量然后在页面加载中使用它。我不明白为什么?
  • Uc1.Page_Load 在 but01_Click 之前首先被调用。即使您将值从 but01_Click 传递给 Uc1,它们也只是存储在私有字符串值中,并且什么都不做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多