比如,我有一个页面  a.aspx 和它对应的cs文件  a.aspx.cs然后我在 a.aspx 页面里面放了一个web用户控件 b.ascx现在我想在a.aspx页面里向 b.ascx 传一个变量b.ascx.cs 里面程序是这样写的:
private int id1;
public int id
{
    set
    {
        this.id1 = Convert.Toint32(value);
    }
}  
在 a.aspx 里面传值的程序是这样写的:
<uc1:b ID="B1" runat="server" id="<%= id2 %>" />
这里面的 id2 是在 a.aspx.cs 的类声明里面定义的
public partial class test_a : System.Web.UI.Page
{
    public int id2;
但程序报错了,错误信息是:分析器错误信息: 无法从其“id”属性的字符串表示形式“<%= id2 %>”创建“System.Int32”类型的对象。我不知道这是什么原因,但是我传一个常量却没有问题,可以传进去。
<uc1:b ID="B1" runat="server" id="123" />请问一下这是什么回事呢?这个问题应该怎么解决啊?谢谢!

解决方案 »

  1.   

    还有,我在 a.aspx 页面上的其它地方写上 <%= id2 %> 可以显示出它的值!
      

  2.   

    将一个变量名名为 id 这么敏感的 word 本身就是很危险的行为.
    形如 <uc1:b ID="B1" runat="server" id="<%= id2 %>" /> 这样的给自定义属性赋值也是不合法, IDE只是认为你重复声明 ID 这个属性, 而且还认为你将 ID 写成小写的, 你说 <uc1:b ID="B1" runat="server" id="123" /> 就没事可能就是 IDE认为你写得不严格, 将ID写成id而已.另外, 你的代码不够严谨.
    public int id
    {
        set
        {
            this.id1 = Convert.Toint32(value); // 本身你已给这个属性定义为int, 如果不是int 是不可能传递过来的, 你这个还来个转换, 显然是十分多余的.
        }
      

  3.   

    所以解决办法是:
    1. 将自定义的属性改成另外一名, 如 TheID, theidd, theiddddd, theiddddddddddddddddddddddddddd都行, 就是不要id, ID, iD, Id.
    2. 不要太省事而在HTML源里给自定义属性赋值, 如果想实现加载时给自定义属性赋值, 你可以在ASPX的page_load里写.okay?!
      

  4.   

    呵呵,谢谢楼上的大哥,我只是举例子,实际程序中并不是id请问在aspx的page_load里面怎么写啊?我不知道写哦!谢谢你啦!
      

  5.   


    第一你的属性名称为啥非得是ID呢不要用ID了在实际控件中,用viewstate存储你的属性值,试试看能不能解决你的问题
      

  6.   

    TO: 请问在aspx的page_load里面怎么写啊?我不知道写哦! 
    ------------------
    你应该知道每个页面都有page_load事件吧, 默认新建的页面都有创建的.
    protected page_load(object sender, eventargs e)
    {
    b1.propertyName = yourvalue;//b1是你的控件名,propertyName 是属性名, yourvalue 是你的值.
    }