我正在使用带有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
}
}
还有其他方法吗?任何建议都表示赞赏。
答案 0 :(得分:3)
在下拉列表中添加一个属性 AutoPostback 并将其设置为true,如下所示:
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SqlDataSource1" DataTextField="PatientID"
DataValueField="PatientID" AutoPostback="true"></asp:DropDownList>
您的代码是以if(!IsPostback)
条件编写的。删除if条件或从下拉列表中选择的索引更改事件中指定值,如下所示。
DropDown列表:
<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;
}
答案 1 :(得分: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
注意:此逻辑将检查每个帖子上是否存在选定项目返回服务器,并仅在下拉列表中有选定项目时显示文本值。
答案 2 :(得分: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
}
}
答案 3 :(得分:0)
您正在为页面加载分配值,但尚未进行下拉选择。
您应该给下拉值,代码可以如下:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
HospNo.Text = DropDownList1.Text;
//other code
}
}
如果您有默认选择值,则可以通过以下方式执行:
HospNo.Text = DropDownList1.SelectedValue;
但在你的情况下,它似乎是空的,这就是错误存在的原因
答案 4 :(得分: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轻松完成。