将参数传递给用户控件 - asp.net

时间:2010-04-27 15:30:45

标签: c# asp.net

我有这个用户控件:

<user:RatingStars runat="server" product="<%= getProductId() %>" category="<%= getCategoryId() %>"></user:RatingStars>

您可以通过调用两种方法来查看我填写的产品和类别:

public string getProductId()
{
    return productId.ToString();
}

public string getCategoryId()
{
    return categoryId.ToString();
}

我不明白为什么在用户控件中,当我收到收到的数据(产品和类别)时,它给了我“&lt;%= getProductId()%&gt;”而不是给出从该方法收到的身份......

任何帮助都会受到赞赏......

修改:解决方法:产品='&lt;%#getProductId()%&gt;'

上一个问题:在用户控件中我有这个:

 public string productId;
 public string product
{
    get
    {
        return productId;
    }
    set
    {
        productId = value;
    }
}

所以,我希望在用户控件中将productId设置为ok。 不幸的是,当我尝试使用它时它是空的...

我写的是不正确的?

2 个答案:

答案 0 :(得分:8)

为了让您获得编译时检查,您可以为用户控制ID,然后在C#中设置其ProductCategory属性,如下所示:

ASPX:

<user:RatingStars id="myUserControlID" runat="server" Product="<%= getProductId() %>" Category="<%= getCategoryId() %>"></user:RatingStars>

<强> CS:

myUserControlID.Product = GetProductId();
myUserControlID.Category = GetCategoryId();

此外,正如5arx提到的那样,一旦您填充了该页面,那么刷新您的网页会重新加载您的控件,您将丢失ProductCategory ID。您可以通过在用户控件的属性上使用ViewState来处理它,如下所示:

private const string ProductKey = "ProductViewStateKey";
public string Product
{
    get
    {
        if (ViewState[ProductKey] == null)
        {
              // do whatever you want here in case it's null 
              // throw an error, return string.empty or whatever
        }
        return ViewState[ProductKey].ToString();
    }

    set
    {
        ViewState[ProductKey] = value;
    }
}

注意:我已更新属性名称大小写以遵循惯例,因为它对我来说更有意义!就个人而言,我总是使用ID(例如:ProductID)对ID进行后缀,以将其与包含Product对象的属性区分开来。在此处阅读有关编码标准的更多信息:Are there any suggestions for developing a C# coding standards / best practices document?

答案 1 :(得分:1)

请发布更多代码?

有几件事:

  • productId是一个对象引用(对string个对象),意思是:

  • 除非您在开始时使用字符串引用编写一些初始化代码来“填充”它,否则它将为null

  • 如果你创建一个字符串,例如string x = new String() x将是空字符串,您可以将其视为“,不带引号。 (它一个字符串,但它是空的,因为它没有字符。)

  • 您只需撰写return productId; - 无需在字符串上调用ToString()

  • 您的页面没有开箱即用的机制来在回发中存储变量。您需要使用ViewState或隐藏的表单字段来执行此操作。