我试图在部分页面回发后从下拉列表中读取值。出于某些原因,它始终为空。
ASP:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlW1SundayProject1" runat="server"
DataSourceID="dataProjectList"
DataTextField="ProjectName" DataValueField="Project_Id"
AppendDataBoundItems="true"
onBlur="validateProjectTask('W1', 'Sunday', 1);"
AutoPostBack="True" ">
<asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
</asp:DropDownList>
<asp:Label ID="lblW1SundayProject1" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
if (ScriptManager.IsInAsyncPostBack)
{
lblW1SundayProject1.Text = "User selected: " + Request.Form["ddlW1SundayProject1"]; // this is always null
}
}
Out put是:“用户选择:”
答案 0 :(得分:1)
它不起作用,因为ASP.NET服务器控件(如DropDownList)会破坏表单字段的名称/ ID。因此,使用您为控件ID键入的名称(ddlW1SundayProject1)来查找Form集合时将找不到任何内容(因为html中的实际名称将类似于ctl00_UpdatePanel1_ddlW1SundayProject1)。
要获取已发布的返回值,您可以使用ddlW1SundayProject1.SelectedValue
,或者如果由于某些奇怪的原因需要查看表单集合,则可以执行Request.Form[ddlW1SundayProject1.ClientID]
。
答案 1 :(得分:0)
如果您在Visual Studio中没有收到任何错误,似乎工作正常,因为我唯一能看到您的代码不正确的是<asp:DropDownList
标记在{{1你有一个额外的“
答案 2 :(得分:0)
原来,BlockUI阻止了回发。我找到了解决方案:JQuery BlockUI with UpdatePanel Viewstate Issue