【问题标题】:Get The Text of a DropdownList from the generated ListItem从生成的 ListItem 中获取 DropdownList 的文本
【发布时间】:2015-09-28 07:10:20
【问题描述】:

这是我的登录页面,假设密码和用户名正确并使用会话获取一定的数据:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using MSSQLConnector;
using System.Data;

namespace SoftwareAnalysisAndDesign.SAD
{
    public partial class OnlineAppSyss : System.Web.UI.Page
    {
        private MSConnector connector = new MSConnector();
        string teachersubjectlistquery = null;
        private DataSet teachersubjectlistData;
        private DataTable teacheraccountdetailsTable;

        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sendet, EventArgs e)
        {
            Teacher();
        }
        public void Teacher()
        {
            //Connection String
            connector.ConnectionString = "Data Source=keith;Initial Catalog=SAD;Integrated Security=True";

           //Subject List                  
           teachersubjectlistquery = "select distinct CourseNo from AssessmentForm where TeacherID =" + username + "";
           teachersubjectlistData = connector.ExecuteQuery(teachersubjectlistquery);
           teachersubjectlistTable = teachersubjectlistData.Tables[0];
           Session["TeacherSubjectList"] = teachersubjectlistTable;
         }
    }

我使用 Session 在另一个页面中传递 DataTable“teachersubjectlistTable”。

在我的教师页面中,我声明下拉列表以使用 Session["TeacherSubjectList"] 生成项目。

<asp:DropDownList runat="server" ID="SubjectList"></asp:DropDownList>

它的锚标签进入ValidateSubject页面:

<a class="btn btn-block" style="margin-top:-37px;margin-left:65px;" runat="server" onserverclick="TeacherSubjects_Click">Proceed</a>

及其背后的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using MSSQLConnector;

namespace SoftwareAnalysisAndDesign.SAD
{
    public partial class TeacherPage : System.Web.UI.Page
    {
        private MSConnector connector = new MSConnector();
        private DataSet SubjectlistData;
        private DataTable SubjectlistTable;
        string query = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            //Populate The Select Tag with Subjects
            SubjectList.DataSource = Session["TeacherSubjectList"];
            SubjectList.DataTextField = "CourseNo";
            SubjectList.DataValueField = "CourseNo";
            SubjectList.DataBind();
        }
        protected void TeacherSubjects_Click(object sender, EventArgs e)
        {
            string getText = SubjectList.SelectedItem.Text;
            //Connection String
            connector.ConnectionString = "Data Source=keith;Initial Catalog=SAD;Integrated Security=True";

            query = "select StudentID,CourseNo,CourseDescription,Units,Day,StartTime,EndTime,Room,Instructor,Amount,Status from assessmentform where CourseNo = '" + getText + "'";

            SubjectlistData = connector.ExecuteQuery(query);
            SubjectlistTable = SubjectlistData.Tables[0];

            //Add a colum check row
            SubjectlistTable.Columns.Add("Check", Type.GetType("System.Boolean"));

            Session["ValidateSubject"] = SubjectlistTable;

            Response.Redirect("ValidateSubjectTeacher.aspx");
        }
    }
}

在我的另一个 aspx 页面 (ValidateSubject) 中,我将 Gridview 声明为会话的持有者:

<asp:GridView runat="server" CssClass="table table-hover table-bordered" ID="ValidateSubject" Style="text-align: center"></asp:GridView>

及其背后的aspx代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SoftwareAnalysisAndDesign.SAD
{
    public partial class ValidateSubjectTeacher : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ValidateSubject.DataSource = Session["ValidateSubject"];
            ValidateSubject.DataBind();
        }
    }
}

我无法在我的下拉列表(TeacherPage)中获取所选项目,它只会获取所选第一个项目的数据。

在我的下拉列表(TeacherPage)中,使用查询生成了两个项目:

CmpE 515
CmpE 516

但是当我选择“CmpE 516”项目并单击继续时,显示的数据只是“CmpE 515”项目。如果用户单击某个项目,如何让我的下拉列表中的其他项目/值显示某些数据?

这里的代码:

string getText = SubjectList.SelectedItem.Text;

即使我选择“CmpE 516”并单击“继续”,它也只会获取文本“CmpE 515”数据。如何获取下拉列表中的其他项目?

【问题讨论】:

    标签: c# asp.net sql-server session code-behind


    【解决方案1】:

    您不应该在每次页面加载时绑定下拉列表,使用IsPostBack 属性检查页面是否第一次加载,只有在这种情况下才能像这样绑定您的下拉列表:-

     protected void Page_Load(object sender, EventArgs e)
     {
         if(!IsPostBack)
         { 
                //Populate The Select Tag with Subjects
                SubjectList.DataSource = Session["TeacherSubjectList"];
                SubjectList.DataTextField = "CourseNo";
                SubjectList.DataValueField = "CourseNo";
                SubjectList.DataBind();
         }
      }
    

    同样适用于您的ValidateSubjectTeacher 页面。

    【讨论】:

    • 可以在点击事件按钮而不是page_load事件中添加if函数吗?
    • @laurencekeithalbano - 没找到你吗?按钮单击无论如何都会是回发,对吗?所以检查这个属性是没有意义的。
    • @laurencekeithalbano - 太好了 :) 我希望你明白发生了什么。当您不使用IsPostBack 时,下拉菜单会再次填充,因此当您检查所选项目时,它会给出第一个项目,因为它是默认选中的。
    • 好的,谢谢。 :) 老实说,我在 c# asp.net 及其内置函数方面没有足够的知识,我在编写代码时一直在研究它们。 :3
    • @laurencekeithalbano - 没关系。继续学习:)如果这对您有帮助,您可以接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多