ASP.NET用户控件:不能初始化使用eval用户控件属性(" ...") [英] ASP.NET User Control : can't initialize a user control property using Eval("...")

查看:172
本文介绍了ASP.NET用户控件:不能初始化使用eval用户控件属性(" ...")的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我设计了一个用户控件。它包含一个公共属性CurrentValue的。
当我尝试使用一个eval前pression初始化属性,一个空值分配。

//在下面code,标签分配是确定的,RatingNull用户控制分配的get空

 < ASP:的TemplateField>
    <&ItemTemplate中GT;
        < ASP:标签ID =Label1的=服务器文本='<%#的eval(难)%GT;'
        < UC1:RatingNull ID =RatingNull1=服务器CurrentValue的='<%#的eval(难)%GT;' />
    < / ItemTemplate中>

如果我直接分配一个值(即CurrentValue的=5),用户控制工作正常。

 公共部分类RatingNull:System.Web.UI.UserControl
{
    私人字符串_CurrentValue;    公共字符串CurrentValue的
    {
        {返回_CurrentValue; }
        集合{_CurrentValue =价值; }
    }
    (......)
}


解决方案

以下code为我工作。当你使用 _CurrentValue 字段?

用户控件

 公共部分类的Test1:System.Web.UI.UserControl
{    公共字符串CurrentValue的
    {
        {返回(串)的ViewState [CurrentValue的]?的String.Empty; }
        集合{的ViewState [CurrentValue的] =值; }
    }    保护覆盖无效渲染(HtmlTextWriter的作家)
    {
        base.Render(作家);        writer.Write(this.CurrentValue);
    }}

 保护无效的Page_Load(对象发件人,EventArgs的发送)
{
    变种DS =新的[]
    {
        新{名字=F1,姓氏=L1},
        新{名字=F2,姓氏=L2},
    };    DataList1.DataSource = DS;
    DataList1.DataBind();
}

HTML标记

 < ASP:DataList控件ID =DataList1=服务器>
    <&ItemTemplate中GT;
        < UC1:测试ID =测试1=服务器CurrentValue的='<%#的eval(名字)%>' />
    < / ItemTemplate中>
< / ASP:DataList控件>

I designed a user control. It contains a public property "CurrentValue". When I try to initialize the property using an Eval expression, a null value is assigned.

// In below code, label assignment is OK, RatingNull user control assignment get null

<asp:TemplateField>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Difficulty") %>'
        <uc1:RatingNull ID="RatingNull1" runat="server" CurrentValue='<%# Eval("Difficulty") %>' />
    </ItemTemplate>

If I directly assigned a value (ie, CurrentValue="5"), user control works fine.

public partial class RatingNull : System.Web.UI.UserControl
{
    private string _CurrentValue;

    public string CurrentValue
    {
        get { return _CurrentValue; }
        set { _CurrentValue = value; }
    }
    (...)
}

解决方案

The following code works for me. When do you use _CurrentValue field?

UserControl

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

    public string CurrentValue
    {
        get { return (string)ViewState["CurrentValue"] ?? string.Empty; }
        set { ViewState["CurrentValue"] = value; }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        base.Render(writer);

        writer.Write(this.CurrentValue);
    }

}

Page

protected void Page_Load(object sender, EventArgs e)
{
    var ds = new[]
    {
        new { FirstName = "F1", LastName = "L1" },
        new { FirstName = "F2", LastName = "L2" },
    };

    DataList1.DataSource = ds;
    DataList1.DataBind();
}

Html Markup

<asp:DataList ID="DataList1" runat="server">
    <ItemTemplate>
        <uc1:Test ID="Test1" runat="server" CurrentValue='<%# Eval("FirstName") %>' />
    </ItemTemplate>
</asp:DataList>

这篇关于ASP.NET用户控件:不能初始化使用eval用户控件属性(&QUOT; ...&QUOT;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆