如果没有从下拉列表中选择任何值,则允许文本框添加到数据库VB.net

时间:2011-09-26 18:28:02

标签: asp.net sql vb.net textbox drop-down-menu

我有一个下拉列表,它会将新标题添加到我的数据库中,但是我想添加一个文本框,如果下拉列表中没有任何内容可以帮助用户输入新标题正在尝试添加。

我有下拉动态动态获取数据库中的标题。不幸的是,这意味着下拉列表中的第一个值不是默认值“选择一个选项”。当从数据库中提取值时,我不知道如何让下拉列表将第一个选项列为“选择”。我无法添加为数据库选择一个选项,这样如何工作呢?

如果下拉列表没有插入任何内容,我可以在代码隐藏中添加什么来允许文本框插入到数据库中?现在我没有文本框的任何代码隐藏,但我确实有下拉列表插入正确的信息。

<li class="alternatingItem">
<asp:LinkButton ID="DescButton" runat="server">Description</asp:LinkButton>
  <asp:Panel ID="DescPanel" runat="server" CssClass="modalPopup" Style="display:none">
  <div class="PopupHeader">Add a Description</div>
  Title:<asp:DropDownList ID="ddlDescription" runat="server" DataSourceID="dsNewDescription" DataTextField="Title" DataValueField="Title">
  </asp:DropDownList><br />
  New Title:<asp:TextBox ID="NewDescTitle" runat="server"></asp:TextBox><br />
  Description:<asp:TextBox ID="Description" runat="server" TextMode="MultiLine">
  </asp:TextBox><br />
  <asp:Button ID="submitDescription" runat="server" Text="Submit" />
  <asp:Button ID="CancelSubmitDesc" runat="server" Text="Cancel" />
  </asp:Panel>
    <asp:ModalPopupExtender ID="DescModal" runat="server" DropShadow="True" 
    DynamicServicePath="" Enabled="True" PopupControlID="DescPanel"
    TargetControlID="DescButton">
    </asp:ModalPopupExtender>
    </li>




Protected Sub submitDescription_Click(ByVal sender As Object, ByVal e
As System.EventArgs) Handles submitDescription.Click
    DescModal.Hide()

    'SQL INSERT: Marketing Table
    Dim strSQL As String = "INSERT INTO Picklist (Title, Data) 
    VALUES (@Title, @Data);
    INSERT INTO Marketing
    (ProductID, MarketingTypeID, MarketingTitle, MarketingData) 
    VALUES (@ProductID ,2, 'Description', scope_identity())"
    Using cn As New SqlConnection
    (System.Configuration.ConfigurationManager.ConnectionStrings
    ("LocalSqlServer").ConnectionString)
        Using cmd As New SqlCommand(strSQL, cn)
            cmd.Parameters.Add(New SqlParameter("@Title", 
            ddlDescription.SelectedValue))
            cmd.Parameters.Add(New SqlParameter("@Data", 
            Description.Text))
            cmd.Parameters.Add(New SqlParameter("@ProductID",
            ProductID.Value))

            cn.Open()

            cmd.ExecuteNonQuery()
        End Using
    End Using
    Response.Redirect(Request.RawUrl)
End Sub

工作代码

Title:<asp:DropDownList ID="ddlDescription" runat="server"
DataSourceID="dsNewDescription" DataTextField="Title" DataValueField="Title" 
enableViewstate="False" AutoPostBack="True" AppendDataBoundItems="True">
<asp:ListItem Text="Select below or enter new" Selected="True"></asp:ListItem>

 If ddlDescription.SelectedValue <> "Select below or enter new" Then
    cmd.Parameters.Add(New SqlParameter("@Title", ddlDescription.SelectedValue))
 Else
    cmd.Parameters.Add(New SqlParameter("@Title", NewDescTitle.Text))
 End If

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true" onblur="validateSelection(this)" ...>
    <asp:ListItem Text="" Value="" />
</asp:DropDownList>
<asp:TextBox ID="TextBox1" runat="server" style="display:none;"  ... />

你的JavaScript函数(不是肯定的,但它应该是关闭的):

validateSelection = function(selectList){
    var input = document.getElementById("<%=TextBox1.ClientID%>");
    if (input){
        input.style.display = selectList.selectedIndex > -1 ? "block" : "none";
        if (selectList.selectedIndex > -1){
            input.focus();
        }            
    }
}

在您的代码隐藏中:

string description = TextBox1.Text;
if (!String.IsNullOrEmpty(DropDownList1.SelectedValue))
    description = DropDownList1.SelectedValue;

答案 1 :(得分:0)

强制用户在下拉列表中选择一个项目,或者在文本框中键入有效值,但不能同时输入两者。 (使用ASP验证器或您最喜欢的本土方法实现此目的)。有了这种保护,很容易:

在按钮事件处理程序中,评估ddlDescription是否具有选定值:如果是,请将其用作参数(就像您的代码已经在做的那样)。如果没有,请使用文本框的值。