【问题标题】:Bind a value to a custom control inside a repeater将值绑定到转发器内的自定义控件
【发布时间】:2014-07-25 06:06:50
【问题描述】:

我看不出哪里出了问题,所以我正在寻求帮助。

我正在尝试将我的自定义控件与转发器中的参数一起使用。调试时该参数始终为空,即使相同的表达式返回上一行代码的数据。

在我的控制范围内,我有:

public string paddockName { get; set; }

我在我的 asp.net 页面上将其分配为:

<mp:Historical runat="server" paddockName='<%# Eval("Name") %>' />

我按照下面的方式制作了上一行代码,它运行良好,所以表达式是正确的。

<asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>

我看到了之前的问题ASP.NET: Bind a value to a custom user control inside a repeater,这与我的问题几乎完全相同,但答案只是说“我做了一个小测试,如果 ProductID 是一个字符串,我就可以工作了。”这并不能帮助我弄清楚他们是如何在调试时让它停止为空的。

【问题讨论】:

  • 我看不出您发布的代码有任何明显错误。您在什么时候检查属性值?
  • 我在点击控件上的按钮时检查属性值。我已经检查过它在页面加载或类似的情况下没有被破坏 - 如果我通过一个字符串作为属性而不是数据绑定,它工作正常。

标签: c# asp.net repeater ascx


【解决方案1】:

问题是按钮回发发生时数据绑定值丢失。该属性值仅在具有 DataBind() 调用的页面请求期间设置。按钮点击是一个新的页面请求。 .NET 控件将绑定值存储在 ViewState 中,因此它们在回发时可用。您可以通过更改属性的存储方式来做同样的事情。

public string paddockName {
    get { return Convert.ToString(ViewState("paddockName")); }
    set { ViewState("paddockName") = value; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多