在btnSave - button事件处理程序中,在以下两行中,SelectedValue始终返回null。
not.TargetSessionCode = this.sessionsDropDownList1.SelectedValue;
not.CourseCode = this.coursesDropDownList1.SelectedValue;
谁能说出原因?
这是我的aspx代码:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="TeacherComposeNotice.aspx.cs" Inherits="Ice_Web_Portal_v_3_0_WebApplication.Teacher.TeacherComposeNotice" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<table style="width: 270px">
<tr>
<td style="text-align: right">
Session:</td>
<td colspan="2">
<asp:DropDownList ID="sessionsDropDownList1" runat="server" Width="178px">
</asp:DropDownList></td>
<td colspan="1" style="width: 6px">
<asp:Label ID="userNameLabel" runat="server" Text="usernameLabel" Width="167px"></asp:Label></td>
</tr>
<tr>
<td style="text-align: right">
Courses:</td>
<td colspan="2">
<asp:DropDownList ID="coursesDropDownList1" runat="server" Width="178px">
</asp:DropDownList></td>
<td colspan="1"><asp:Label id="labCourses" runat="server" Width="167px" Text="labCourses"></asp:Label></td>
</tr>
<tr>
<td style="text-align: right">
Subject:</td>
<td colspan="3">
<asp:TextBox ID="mailSubjectTextBox" runat="server" Width="343px"></asp:TextBox></td>
</tr>
<tr>
<td style="text-align: right" valign="top">
Content:</td>
<td colspan="3">
<asp:TextBox ID="mailContentTextBox" runat="server" Height="181px" Width="343px" Font-Names="Verdana"></asp:TextBox></td>
</tr>
<tr>
<td style="text-align: right" valign="top">
Expiry Date :</td>
<td colspan="3">
</td>
</tr>
<tr>
<td style="text-align: right" valign="top">
</td>
<td colspan="3" style="text-align: center">
</td>
</tr>
<tr>
<td style="text-align: right" valign="top">
</td>
<td colspan="3" style="text-align: left">
<asp:Label ID="errorMessageLabel" runat="server" ForeColor="#C00000" Text="***" Width="314px"></asp:Label></td>
</tr>
<tr>
<td style="text-align: right" valign="top">
</td>
<td colspan="3" style="text-align: left">
<asp:Button ID="btnBack" runat="server" OnClick="btnBack_Click" Text="Back" />
<asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="Save" /></td>
</tr>
</table>
</asp:Content>
这是我的代码隐藏:
public partial class TeacherComposeNotice : System.Web.UI.Page
{
string username = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
username = (string)Request.QueryString["username"];
if (!IsPostBack)
{
LoadAllSessionsToDDL();
LoadAllCoursesToDDL();
}
}
private void LoadAllSessionsToDDL()
{
this.sessionsDropDownList1.Items.Clear();
List<Ice_Web_Portal.BO.Session_> items = Ice_Web_Portal.BO.Session_.GetAllSessions();
this.sessionsDropDownList1.DataSource = items;
this.sessionsDropDownList1.DataTextField = "SessionName";
this.sessionsDropDownList1.DataValueField = "SessionCode";
this.sessionsDropDownList1.DataBind();
this.sessionsDropDownList1.SelectedIndex = 0;
}
private void LoadAllCoursesToDDL()
{
this.coursesDropDownList1.Items.Clear();
List<Course> items = Course.GetCourses();
this.coursesDropDownList1.DataSource = items;
this.coursesDropDownList1.DataTextField = "CourseName";
this.coursesDropDownList1.DataValueField = "CourseCode";
this.coursesDropDownList1.DataBind();
}
protected void btnBack_Click(object sender, EventArgs e)
{
Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username);
}
protected void btnSave_Click(object sender, EventArgs e)
{
Ice_Web_Portal.BO.Teacher teacher = Ice_Web_Portal.BO.Teacher.GetTeacherByUsername(username);
if (teacher != null)
{
Notice not = new Notice();
not.HangingDate = DateTime.Now;
not.TeacherCode = teacher.TeacherCode;
not.TargetSessionCode = this.sessionsDropDownList1.SelectedValue;
not.CourseCode = this.coursesDropDownList1.SelectedValue;
not.NoticeSubject = this.mailSubjectTextBox.Text;
not.NoticeContent = this.mailContentTextBox.Text;
not.ExpiryDate = DateTime.Now.AddMonths(1);
not.IsExpired = false;
bool success = Notice.Save(not);
if (success)
{
errorMessageLabel.Text = "Saved";
}
else
{
errorMessageLabel.Text = "Save failed";
}
}
else
{
//labErrorMessage.Text = "No teacher found";
}
}
}
答案 0 :(得分:1)
很奇怪。你的代码似乎完全没问题。我尝试使用以下代码重建您的页面:
public partial class DropdownTests : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadAllCoursesToDDL();
}
}
private List<Course> GetDummyCourses()
{
return new List<Course>{
new Course{ CourseCode = "A12", CourseName = "Introduction to Programming"},
new Course{ CourseCode = "B112", CourseName = "Theory of Computing"}
};
}
private void LoadAllCoursesToDDL()
{
this.coursesDropDownList1.Items.Clear();
List<Course> items = GetDummyCourses();
this.coursesDropDownList1.DataSource = items;
this.coursesDropDownList1.DataTextField = "CourseName";
this.coursesDropDownList1.DataValueField = "CourseCode";
this.coursesDropDownList1.DataBind();
}
protected void btnBack_Click(object sender, EventArgs e)
{
//Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username);
}
protected void btnSave_Click(object sender, EventArgs e)
{
string code = coursesDropDownList1.SelectedItem.Value;
string code2 = coursesDropDownList1.SelectedValue;
}
}
public class Course
{
public string CourseCode { get; set; }
public string CourseName { get; set; }
}
它工作得非常好。如果是,请尝试直接使用coursesDropdownList1.SelectedItem.Value
代替“SelectedValue
”。无所谓,但只是试一试。
作为尝试,我还会创建一个新页面,在那里复制aspx代码并为其创建代码隐藏。在我看来,必须有更多的东西导致它失败。您是否在运行时动态创建并向UI添加一些字段?一些自定义服务器控件等??您的问题可能是您丢失了ViewState。
答案 1 :(得分:1)
我遇到了同样的问题,但是enableViewState = true
是唯一能让它发挥作用的解决方案。
很奇怪。