ASP.NET用户控件Eval()DB.Null问题

时间:2011-09-19 10:52:43

标签: c# asp.net user-controls

我有一个包含转发器的用户控件。转发器根据创建实例时使用的参数输出一列或两列。

如果没有为第二列指定值,即只应显示一列,如果尚未设置值,它似乎不喜欢它。

我正在尝试输出在后面的用户控制代码中设置的字符串,而不是数据项。

我有以下aspx:

<%# Eval(Column2Data) == DBNull.Value ? "</tr> " : String.Format("<td>{0}</td></tr>", Eval(Column2Data))%>

如果Column2Data有值,则会有效,但如果没有,则会显示以下错误:

Value cannot be null.
Parameter name: expression

为什么这不起作用?

4 个答案:

答案 0 :(得分:2)

试试这个

<% (Column2Data == null) ? "</tr>td></td></tr>", Eval(Column2Data))%> 

如果value为null,我认为你想呈现空td

答案 1 :(得分:2)

这就是你要找的东西:

<%#  DBNull.Value.Equals(Eval(Column2Data)) ? "</tr> " : String.Format("<td>{0}</td></tr>", Eval(Column2Data))%>

答案 2 :(得分:1)

试试这个,

 <%# Eval("Column2Data")==null  ? "<tr><td>N.A</td></tr>" 
                 : Eval("Column2Data","<tr><td>{0}</td></tr>")%>

这是样本列表,

public class Data
    {
        public int? Column2Data { get; set; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            List<Data> list = new List<Data>()
            {
                 new Data(){ Column2Data=10100},
                 new Data(){},
                 new Data(){ Column2Data=4000}
            };
            Repeater1.DataSource = list;
            Repeater1.DataBind();
        }
    }

答案 3 :(得分:0)

<%# (string.IsNullOrEmpty(Convert.ToString(Eval("Column2Data")))) ? "Value" :Eval("Column2Data") %>