【问题标题】:ASP.NET DropDownList bound to data but allows for nulls?ASP.NET DropDownList 绑定到数据但允许空值?
【发布时间】:2010-09-20 08:27:01
【问题描述】:

我正在使用 LINQ to SQL,并且希望能够选择父级或没有父级。假设我有一个包含 PersonId、Name 和 ParentId 列的 People 表。在 ASP 中,我想输入名称,选择父级并单击“添加”以创建新的人员记录,但我也希望能够将 ParentId 保留为空。不要问为什么,这只是对我想做的事情的简单解释。

<asp:LinqDataSource ID="LinqPeople" runat="server" 
    ContextTypeName="MyDataContext" EntityTypeName="" 
    Select="new (PersonId, Name)" TableName="People"/>
<asp:TextBox ID="textName" runat="server" />
<asp:DropDownList runat="server" ID="dropParent"
    DataSourceID="LinqPeople" DataTextField="Name" DataValueField="PersonId" />
<asp:Button ID="buttonAddPerson" runat="server" Text="Add" />

有没有办法在列表框中显示值为 null 的“无”?我已经想到了几个选项,哪个是最好的还是有其他的?

  1. 为 SQL“SELECT PersonId, Name FROM People UNION SELECT Null, 'NONE'”创建一个存储过程

  2. 为“NO PARENT”添加一个复选框

  3. 在 DropDownList 的标记中放置一个 ListItem

  4. 在 DataBound 事件处理程序上添加项目

我找到了更好的方法,在标记中添加一个 ListItem:

<asp:LinqDataSource ID="LinqPeople" runat="server" 
    ContextTypeName="MyDataContext" EntityTypeName="" 
    Select="new (PersonId, Name)" TableName="People"/>
<asp:TextBox ID="textName" runat="server" />
<asp:DropDownList runat="server" ID="dropParent"
        DataSourceID="LinqPeople" DataTextField="Name" DataValueField="PersonId">
    <asp:ListItem Value="">(none)</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="buttonAddPerson" runat="server" Text="Add" />

但是,我找不到任何方法在 SelectedValue 中返回实际值“NULL”,但我猜我可以处理。我认为 ListItem 方式是最好的,因为它是在标记中定义的,不需要任何代码...

【问题讨论】:

  • 如果没有人发布任何其他内容,我将接受事件处理程序的回答...

标签: asp.net linq


【解决方案1】:

不要认为你可以设置 NULL 的值,因为它是一个字符串类型。

我不喜欢检查 NULL,通常,我会使用一些没有意义的东西,比如 -1 或其他东西并检查它。您也可以假设您选择的索引为 0,但是,如果您不遵循整个应用程序,这可能会导致代码中的其他地方出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2023-03-21
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多