[英]Getting a value from a JavaScript function to my ASP.NET / C# Code-Behind
[英]Why is my DropdownList value not being passed from my code-behind to my C# class in asp?
我有一个下拉列表,可从数据库中获取学期列表。 选择一个学期后,将显示该学期课程的下拉列表。 选择课程后,将显示该课程的学生下拉列表。 选择学生后,会出现一种形式的作业分数信息。 提交作业时,我想将学生DDL的值从SaveScore_Click函数传递到我的Grades.cs类。 出于某种原因,enrollmentId(课程的学生)的值始终返回0。用所有学生ID正确填充了学生DDL。 为什么此值不传递给我的Grades.calculate()函数?
代码隐藏(AddScore.aspx.cs)
public partial class AddScore : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
PopulateSemesterList();
}
private void PopulateSemesterList()
{
string connstring;
connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
SqlConnection conn = new SqlConnection(connstring);
SqlCommand cmd = new SqlCommand("dbo.GetSemesters", conn);
conn.Open();
DDSemesters.DataSource = cmd.ExecuteReader();
DDSemesters.DataTextField = "semesterName";
DDSemesters.DataValueField = "semesterId";
this.DataBind();
conn.Close();
conn.Dispose();
DDSemesters.Items.Insert(0, new ListItem("Select Semester", "0"));
DDSemesters.SelectedIndex = 0;
}
protected void DDSemesters_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList DDSemesters = sender as DropDownList;
int selectedSemester = Convert.ToInt32(DDSemesters.SelectedItem.Value);
string connstring;
connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
SqlConnection conn = new SqlConnection(connstring);
SqlCommand cmd = new SqlCommand("dbo.GetCourses", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@semesterId", selectedSemester));
conn.Open();
DDCourses.DataSource = cmd.ExecuteReader();
DDCourses.DataTextField = "courseName";
DDCourses.DataValueField = "courseId";
this.DataBind();
conn.Close();
conn.Dispose();
DDCourses.Items.Insert(0, new ListItem("Select Course", "0"));
DDCourses.SelectedIndex = 0;
DDCourses.Visible = true;
CoursesLbl.Visible = true;
}
protected void DDCourses_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList DDCourses = sender as DropDownList;
int selectedCourse = Convert.ToInt32(DDCourses.SelectedItem.Value);
string connstring;
connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
SqlConnection conn = new SqlConnection(connstring);
SqlCommand cmd = new SqlCommand("dbo.CourseEnrollment", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@courseId", selectedCourse));
conn.Open();
DDStudents.DataSource = cmd.ExecuteReader();
DDStudents.DataTextField = "fullName";
DDStudents.DataValueField = "enrollmentId";
this.DataBind();
conn.Close();
conn.Dispose();
DDStudents.Items.Insert(0, new ListItem("Select Student", "0"));
DDStudents.SelectedIndex = 0;
DDStudents.Visible = true;
StudentLbl.Visible = true;
}
protected void DDStudents_SelectedIndexChanged(object sender, EventArgs e)
{
assignmentInfoDiv.Visible = true;
}
protected void SaveScore_Click(object sender, EventArgs e)
{
Grades studentGrade = new Grades();
studentGrade.enrollmentId = Convert.ToInt32(DDStudents.SelectedItem.Value);
studentGrade.calculate();
AssignmentError.Text = Convert.ToString(studentGrade.enrollmentId);
}
}
AddScore.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddScore.aspx.cs" Inherits="midterm.AddScore" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Select Semester"></asp:Label><br />
<asp:DropDownList ID="DDSemesters" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDSemesters_SelectedIndexChanged" DataTextField="semesterName" DataValueField="semesterId"></asp:DropDownList><br />
<asp:Label ID="CoursesLbl" runat="server" Text="Select Course" Visible="false"></asp:Label><br />
<asp:DropDownList visible="false" ID="DDCourses" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDCourses_SelectedIndexChanged" DataTextField="courseName" DataValueField="courseId"></asp:DropDownList><br />
<asp:Label ID="StudentLbl" runat="server" Text="Select Student" Visible="false"></asp:Label><br />
<asp:DropDownList visible="false" ID="DDStudents" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDStudents_SelectedIndexChanged" DataTextField="fullName" DataValueField="enrollmentId"></asp:DropDownList><br />
<div id="assignmentInfoDiv" runat="server" visible="false" style="margin-top: 50px;">
<asp:Label ID="studentName" runat="server" Text="Student Name" ></asp:Label>
<asp:Label ID="AssignmentLbl" runat="server" Text="Assignment"></asp:Label><br />
<asp:DropDownList ID="AssignmentList" runat="server">
<asp:ListItem Text="Assignment 1"></asp:ListItem>
<asp:ListItem Text="Assignment 2"></asp:ListItem>
<asp:ListItem Text="Assignment 3"></asp:ListItem>
<asp:ListItem Text="Assignment 4"></asp:ListItem>
<asp:ListItem Text="Assignment 5"></asp:ListItem>
<asp:ListItem Text="Assignment 6"></asp:ListItem>
<asp:ListItem Text="Assignment 7"></asp:ListItem>
<asp:ListItem Text="Assignment 8"></asp:ListItem>
<asp:ListItem Text="Assignment 9"></asp:ListItem>
<asp:ListItem Text="Assignment 10"></asp:ListItem>
<asp:ListItem Text="Quiz 1"></asp:ListItem>
<asp:ListItem Text="Quiz 2"></asp:ListItem>
<asp:ListItem Text="Midterm Project"></asp:ListItem>
<asp:ListItem Text="Final Project"></asp:ListItem>
</asp:DropDownList>
<asp:Label ID="earnedLbl" runat="server" Text="Points Earned:"></asp:Label>
<asp:TextBox ID="earnedTxt" runat="server"></asp:TextBox>
<asp:Label ID="possibleLbl" runat="server" Text="Points Possible:"></asp:Label>
<asp:TextBox ID="possibleTxt" runat="server"></asp:TextBox>
<asp:Button ID="SaveScore" runat="server" Text="Save" OnClick="SaveScore_Click" />
<asp:Label ID="AssignmentError" runat="server"></asp:Label>
</div>
</div>
</form>
</body>
</html>
Grades.cs
public class Grades
{
public int pointsEarned;
public int pointsPossible;
public int totalEarned;
public int totalPossible;
public int percentage;
public int courseId;
public string enrollmentId;
public string assignmentName;
public string error;
public string letterGrade;
public double score;
public void calculate()
{
return enrollmentId;
}
}
嗨,我认为您已经错过了用于下拉列表控件的Databind方法。
DDSemesters.DataSource = cmd.ExecuteReader();
DDSemesters.DataTextField = "semesterName";
DDSemesters.DataValueField = "semesterId";
this.DataBind();
这里this.DataBind()方法来自System.Web.UI.Page.DataBind()相反,您必须使用DDSemesters.DataBind()为两个下拉列表绑定下拉列表,如下所示
DDSemesters.DataSource = cmd.ExecuteReader();
DDSemesters.DataTextField = "semesterName";
DDSemesters.DataValueField = "semesterId";
DDSemesters.DataBind();
我认为您的grade.cs应该是这样的
public class Grades
{
public int pointsEarned;
public int pointsPossible;
public int totalEarned;
public int totalPossible;
public int percentage;
public int courseId;
public string strenrollmentId;
public string assignmentName;
public string error;
public string letterGrade;
public double score;
public string enrollmentId;
{
get { return strenrollmentId; }
set { strenrollmentId= value; }
}
}
和按钮单击应该是
protected void SaveScore_Click(object sender, EventArgs e)
{
Grades studentGrade = new Grades();
studentGrade.enrollmentId = DDStudents.SelectedItem.Value;
//studentGrade.calculate();
AssignmentError.Text = studentGrade.enrollmentId;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.