1

我在 c# 中使用 asp.net,我有一个包含varchar项目列表的下拉列表,我有一个文本框,当我在下拉列表中选择一个项目时,它应该显示在文本框中。到目前为止,我已经尝试过代码,但它显示的是Null Reference Exception.

Patient ID:<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID">
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ConStr %>"
    SelectCommand="SELECT [PatientID] FROM [Patient_Data] WHERE ([DummyValue] = @DummyValue)">
    <SelectParameters>
        <asp:Parameter DefaultValue="Y" Name="DummyValue" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

 Hospital No.:
    </td>
    <td>
        <asp:TextBox ID="HospNo" runat="server" ></asp:TextBox>
    </td>

在 C# 中

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string pid = DropDownList1.SelectedItem.Text;
        HospNo.Text = pid.ToString();//Error in this line

        //other code
    }
 }

还有其他方法吗?任何建议表示赞赏。

4

5 回答 5

3

在您的下拉列表中添加一个属性AutoPostback并将其设置为 true ,如下所示:

<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID" AutoPostback="true"></asp:DropDownList>

并且您的代码已按if(!IsPostback)条件编写。从下拉列表的选定索引更改事件中删除 if 条件或分配值,如下所示。

下拉列表 :

<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID" AutoPostback="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>

代码背后:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
   HospNo.Text = DropDownList1.SelectedItem.Text;
}
于 2013-11-08T05:04:45.310 回答
1

你不需要ToString()一个string,它已经是一个string

SelectedItem在尝试在每个回帖上设置文本框的文本值之前,请尝试检查下拉列表是否Text确实是某些内容,如下所示:

// Check to see if the selected item of the drop down list is something or not
if(DropDownList1.SelectedItem != null)
{
    if(!String.IsNullOrEmpty(DropDownList1.SelectedItem.Text)
    {
        HospNo.Text = DropDownList1.SelectedItem.Text;
    }
}

//other code

注意:此逻辑将检查返回服务器的每个帖子中是否存在选定项目,并且仅当下拉列表中有选定项目时才显示文本值。

于 2013-11-08T05:04:43.937 回答
1
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.AutoPostBack= true;
        string pid = DropDownList1.SelectedItem.Text;
        HospNo.Text = pid.ToString();//Error in this line

        //other code
     }
 }
于 2013-11-08T05:31:58.057 回答
0

您在尚未进行下拉选择的页面加载时分配值。

你应该给下拉值,代码如下:

protected void Page_Load(object sender, EventArgs e) {

    if (!IsPostBack)
    {
        HospNo.Text = DropDownList1.Text;

    //other code
    }
 }

如果您有默认选择值,那么您可以通过以下方式完成:

HospNo.Text = DropDownList1.SelectedValue;

但在你的情况下,它似乎为空,这就是错误存在的原因

于 2013-11-08T05:03:46.667 回答
0

您应该将此代码放在下拉更改事件中。

注册更改事件

<asp:DropDownList ID="DropDownList1" runat="server" OnChange="DropDownList1_Change"
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID">
</asp:DropDownList>

背后的代码

protected void DropDownList1_Change(object sender, EventArgs e)
{

        string pid = DropDownList1.SelectedItem.Text;
        HospNo.Text = pid.ToString();//Error in this line

}

这也可以在客户端使用 Jquery/Javascript 轻松完成。

于 2013-11-08T05:07:18.863 回答