如何有条件地更改表示层中的控件属性

时间:2009-02-11 22:31:03

标签: asp.net

我在ASP.Net方面不是很有经验,因为我主要使用PHP。 我正在尝试这个,但它不起作用:

<asp:TextBox runat="server" ID="txtAnswer" 
  TextMode='<%# IIf(DataBinder.Eval(Container.DataItem, "DoLargeInput"), "MultiLine", "SingleLine" )%>' Text=''></asp:TextBox>

DoLargeInput是一个布尔值。

为什么这不起作用?

我遇到以下错误:

System.InvalidCastException: Conversion from string "MultiLine" to type 'Integer' is not valid. ---> System.FormatException: Input string was not in a correct format.
   at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
   at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
   --- End of inner exception stack trace ---
   at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
   at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(Object Value)
   at ASP.profile_questions_aspx.__DataBinding__control6(Object sender, EventArgs e)
   at System.Web.UI.Control.OnDataBinding(EventArgs e)
   at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
   at System.Web.UI.Control.DataBind()
   at System.Web.UI.Control.DataBindChildren()
   at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
   at System.Web.UI.Control.DataBind()
   at System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem)
   at System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource)
   at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e)
   at System.Web.UI.WebControls.Repeater.DataBind()
   at profile_questions.LoadObjects()

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

尝试: -

IIf(DataBinder.Eval(Container.DataItem, "DoLargeInput"), TextBoxMode.MultiLine, TextBoxMode.SingleLine

这个解析器会为你准确地转换TextMode =“MultiLine”。在此绑定代码发生时,解析结束,您需要像在代码中一样指定值。

答案 1 :(得分:0)

转换为'Integer'失败是因为TextMode属性是.NET enum,它在内部表示为整数。 TextBoxMode.MultiLineTextBoxMode.SingleLine代表正确的价值。

在MSDN上,您可以看到TextBox.TextMode property类型为TextBoxMode