级联下拉列表,第二个下拉列表,在数据库中存储错误的值

时间:2016-01-21 15:25:14

标签: sql asp.net sql-server database

我有两个下拉列表Complaint_Type和Complaint_SubType。使用SqlDataSource我已经填充了两个。选择“类型”下拉列表时,会正确填充“子类型”下拉列表。当我选择值并按提交并检入数据库时​​,类型和子类型值都相同。

.aspx代码

 protected void Page_Load(object sender, EventArgs e)
{

}

protected void DDLCTypeDataBound(object sender, EventArgs e)
{
    ddlCType.Items.Insert(0, new ListItem("Select", "0"));

}

protected void DDLSubTypeDataBound(object sender, EventArgs e)
{
    ddlSubType.Items.Insert(0, new ListItem("Select", "0"));
}

protected void btn_Reset(object Sender, EventArgs e)
{

}


protected void btnReport_Click(object Sender, EventArgs e)
{

        SqlConnection con = new SqlConnection(Utils.Connection);
        String query = "insert into CITIZEN_COMPLAINTS(TYPE, SUBTYPE, LOCATION, DESCRIPTION, IMAGE) values (@TYPE, @SUBTYPE, @LOCATION, @DESCRIPTION, @IMAGE)";
        SqlCommand cmd = new SqlCommand(query, con);
        cmd.Parameters.Add("@TYPE", SqlDbType.Int).Value = ddlCType.SelectedValue;
        cmd.Parameters.Add("@SUBTYPE", SqlDbType.Int).Value = ddlSubType.SelectedValue;
        cmd.Parameters.Add("@LOCATION", SqlDbType.VarChar).Value = txtLoc.Text;
        cmd.Parameters.Add("@DESCRIPTION", SqlDbType.VarChar).Value = txtDesc.Text;
        cmd.Parameters.Add("@IMAGE", SqlDbType.VarChar).Value = Utils.file_upload(fuImage);

        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            //...
        }
        finally
        {
            con.Close();
        }
    }

.cs代码

describe '#current_user_link' do
  it 'returns a link to the current user ' do
    user = build(:user)
    expected_link = link_to user.name, user
    allow(controller).to receive(:current_user).and_return(user)

    expect(helper.current_user_link).to eq(expected_link)
  end
end

Values stored in database

1 个答案:

答案 0 :(得分:1)

原因是因为DataValueField="Type_ID"对于这些下拉的标记中的两个下拉都是相同的。

对于子类型的第二个下拉列表,您应该具有DataValueField="SubType_ID"之类的内容。

假设Complaint_SubType表中的主键列为SubType_ID,下面的标记将解决您的问题。请注意这两个标记中的DataValueField,它们应该是不同的。

输入下拉列表

<asp:DropDownList ID="ddlCType" runat="server" CssClass="form-control"
 DataSourceID="SqlDataSource1" DataTextField="Comp_Type" DataValueField="Type_ID" 
  AutoPostBack="True" OnDataBound="DDLCTypeDataBound" Style="width: 400px">
</asp:DropDownList>

子类型下拉列表

<asp:DropDownList ID="ddlSubType" runat="server" CssClass="form-control"
  DataSourceID="SqlDataSource2" DataTextField="Comp_SubType" DataValueField="SubType_ID"
  OnDataBound="DDLSubTypeDataBound" Style="width: inherit">
</asp:DropDownList>