ASP.net有很多具有相同值的文字?

时间:2011-08-24 15:45:10

标签: c# asp.net literals repeat

鉴于内容页面上的代码:

Are you sure you want to add another <asp:Literal runat="server" id="Name1" /> to the basket?  
You already have a <asp:Literal runat="server" id="Name2" /> in your basket.  
<asp:Literal runat="server" id="Name3" /> has not yet been added to your basket.

然后在代码隐藏中:

Name1.Text = Product.Name;
Name2.Text = Product.Name;
Name3.Text = Product.Name;

我很确定这不是最好的解决方法,是否有ASP.net功能或我不知道的设计模式?

7 个答案:

答案 0 :(得分:4)

为什么不使用string.Format

String.Format("Are you sure you want to add another {0} to the basket? You already have a {0} in your basket. {0} has not yet been added to your basket.", Product.Name)

答案 1 :(得分:3)

嗯,实际上你不需要使用文字,如果渲染中的这三行应该显示相同的产品名称,那么:

Are you sure you want to add another <%# Product.Name %> to the basket?  
You already have a <%# Product.Name %> in your basket.  
<%# Product.Name %> has not yet been added to your basket.

Load期间,只需在PageControl中调用DataBind()。

或者您可以使用ResX,添加一个名为“BasketText”的字符串资源并放入此字符串:

Are you sure you want to add another {0} to the basket?  
You already have a {0} in your basket.  
{0} has not yet been added to your basket.

在您的控件或页面中,实现一个名为“BasketText”的内部或公共只读属性,并在getter中执行此操作:

return String.Format(GetLocalResourceObject("BasketText"), ProductName)

然后,您的标记将如下所示(也调用DataBind,如前面的方法):

<%# BasketText %>

更新&amp;注意

请注意其他建议内联评估的用户<%=...%>。这是一种旧式的方法,它具有强大的对应物。如果您这样做并且代码修改了控件集合,那么您的页面将抛出异常。

出于这个原因,我将始终建议数据绑定表达式,它没有这样的问题,这些就像魅力一样。

答案 2 :(得分:1)

如果您可以访问变量Product.name或公开它,则可以执行以下操作:

Are you sure you want to add another <%=Product.Name%> etc..

而不是文字

答案 3 :(得分:1)

为什么不使用一个Literal控件然后使用

String.format( "Are you sure you want to add another {0} to the basket?  You already have a {0} in your basket.  {0} has not yet been added to your basket.", Product.Name);

检查出来:

http://msdn.microsoft.com/en-us/library/1ksz8yb7.aspx

干杯

答案 4 :(得分:0)

我没有看到这个问题,除了变量名称可以使用一些更好的名称。但是,您可以动态地向页面添加控件,但这对于这种情况可能有点过分。这是一篇很好的文章。

http://www.4guysfromrolla.com/articles/081402-1.aspx

答案 5 :(得分:0)

只需使用一个带有runat="server"的文字,并且在当前为Product.Name分配String.Format的文字中,{{1}}

答案 6 :(得分:0)

不能说这必然更好,但更短的选择。

<%=string.Format("Are you sure you want to add another {0} to the basket?  You already have a {0} in your basket. {0} has not yet been added to your basket.",Product.Name)%>