我正在下拉列表 Technology
中检索表格 ddlTechnology
中的数据。
我在表中使用TechnologyId
作为主键,值为1,2,3,4
现在根据技术,我必须在问题库中添加问题。但是当我选择下拉列表中的任何项目时,我的 SelectedIndex
始终为0.
我想从下拉列表中 TechnologyId
。
我尝试过以下代码,但它无效
using (dbDataContext dt = new dbDataContext())
{
var qry = from i in dt.Technologies
select i;
ddlTechnology.DataSource = qry;
ddlTechnology.DataValueField = "TechnologyId";
ddlTechnology.DataTextField = "TechnologyName";
ddlTechnology.DataBind();
ddlTechnology.Items.Insert(0, new ListItem("Select Technology", ""));
}
添加按钮以根据所选技术添加问题。
protected void btnAdd_Click(object sender, EventArgs e)
{
using (dbDataContext dt = new dbDataContext())
{
Question objQtn = new Question();
objQtn.Question1 = txtQuestion.Text;
objQtn.Option1 = txtOption1.Text;
objQtn.Option2 = txtOption2.Text;
objQtn.Option3 = txtOption3.Text;
objQtn.Answer = txtAnswer.Text;
// below here selectedIndex is always zero..
objQtn.TechnologyId = ddlTechnology.SelectedIndex;
dt.Questions.InsertOnSubmit(objQtn);
dt.SubmitChanges();
txtAnswer.Text = "";
txtOption1.Text = "";
txtOption2.Text = "";
txtOption3.Text = "";
txtQuestion.Text = "";
}
}
答案 0 :(得分:8)
<强> Reason1:强>
好像你在每次回发都绑定下拉列表。如果这是一个问题,那么保持你的加载代码!IsPostBack应该工作。
if(!IsPostBack)
{
using (dbDataContext dt = new dbDataContext())
{
var qry = from i in dt.Technologies
select i;
ddlTechnology.DataSource = qry;
ddlTechnology.DataValueField = "TechnologyId";
ddlTechnology.DataTextField = "TechnologyName";
ddlTechnology.DataBind();
ddlTechnology.Items.Insert(0, new ListItem("Select Technology", ""));
}
}
原因2
在某些情况下,如果程序员禁用任何控件/页面的ViewState
属性,那么也会控制它在回发时丢失它的值。
答案 1 :(得分:0)
请找到ref的代码。希望它能帮到你: (objQtn.TechnologyId = ddlTechnology.SelectedIndex;) 这两个中的一个是字符串类型检查一次。
Index.aspx
<asp:DropDownList ID="ddlCloth" runat="server"></asp:DropDownList>
<asp:Button runat="server" ID="btnSave" OnClick="btnSave_Click" />
<强> Index.aspx.cs 强>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt1 = new DataTable();
dt1.Columns.AddRange(new DataColumn[2] { new DataColumn("Id"), new DataColumn("Name") });
dt1.Rows.Add(1, "Shirt");
dt1.Rows.Add(2, "Jeans");
ddlCloth.DataSource = dt1;
ddlCloth.DataTextField = "Name";
ddlCloth.DataValueField = "Id";
ddlCloth.DataBind();
}
protected void btnSave_Click(object sender, EventArgs e)
{
int id = Convert.ToInt32(ddlCloth.SelectedItem.Value);
string text = Convert.ToString(ddlCloth.SelectedItem.Text);
int index=Convert.ToInt32(ddlCloth.SelectedIndex);
}
答案 2 :(得分:0)
需要在下面的事件中绑定下拉列表。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// Bind your dropdown list
}
}