我有这个用户控件:
<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。 不幸的是,当我尝试使用它时它是空的...
我写的是不正确的?
答案 0 :(得分:8)
为了让您获得编译时检查,您可以为用户控制ID
,然后在C#中设置其Product
和Category
属性,如下所示:
ASPX:
<user:RatingStars id="myUserControlID" runat="server" Product="<%= getProductId() %>" Category="<%= getCategoryId() %>"></user:RatingStars>
<强> CS:强>
myUserControlID.Product = GetProductId();
myUserControlID.Category = GetCategoryId();
此外,正如5arx提到的那样,一旦您填充了该页面,那么刷新您的网页会重新加载您的控件,您将丢失Product
和Category
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
或隐藏的表单字段来执行此操作。