我有一个依赖于母版页的Web表单,其中包含一个简单的表单,如下所示:
<asp:TextBox runat="server" ID="txtValue"></asp:TextBox>
<asp:DropDownList runat="server" ID="ddlProduct" />
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_OnClick" />
在Page_Load上,我使用值动态填充DropDownList:
foreach(var product in products)
{
ListItem item = new ListItem(product.Nazev, product.ProductId.ToString());
ddlProduct.Items.Add(item);
}
现在..通常,如果DropDownList是静态填充的,那么我会这样做,以从中获取所选值:
protected void btnConfirm_OnClick(object sender, EventArgs e)
{
string selectedProduct = ddlProduct.SelectedValue;
}
但是在这种情况下这是不行的。因此,我尝试使用其中一种方法(实际上实际上是相同的)从POSTed参数中直接获取所选值:
protected void btnConfirm_OnClick(object sender, EventArgs e)
{
string selectedProduct = Request.Form.Get(ddlProdukt.ClientID);
string selectedProduct2 = Request.Params[ddlProdukt.ClientID];
}
但是它不起作用。如果我对其进行调试,则POSTed形式(Request.Params)中DropDownList的实际“ id /名称”为:
“ ctl00 $ MainContent $ ddlProdukt”
我的方法给我的ClientId是:
“ ctl00_MainContent_ddlProdukt”
我不知道为什么在DDL控件的ID中为什么用“ _”代替“ $”。这似乎是一件微不足道的事情。应该有比替换字符更好的方法来找出正确的ID,对吧?
我还有其他方法可以“查找/询问”所选值吗?
*请注意,我不是在寻找使用UpdatePanel的解决方案。我知道,使用UpdatePanel会导致在回发后成功选择DDL值,但这不是我在这里寻找的答案。
谢谢您的输入。
答案 0 :(得分:0)
根据要求提供示例。此代码和<asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList>
位于aspx页面上,而不是Master页面上。
protected void Page_Load(object sender, EventArgs e)
{
//bind data not here
if (IsPostBack == false)
{
//but inside the ispostback check
ddlProduct.Items.Add(new ListItem("Item 1", "1"));
ddlProduct.Items.Add(new ListItem("Item 2", "2"));
ddlProduct.Items.Add(new ListItem("Item 3", "3"));
ddlProduct.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = ddlProduct.SelectedValue;
}
答案 1 :(得分:0)
如果仍然需要使用Request.Form.Get
或Request.Params
,则应在ddlProdukt.UniqueID
上调用它,因为分隔符在.ClientID
上是'$'而不是'_'< / p>