如何在不使用UpdatePanel的情况下从动态填充的下拉列表中获取POSTed值?

时间:2018-12-13 12:19:38

标签: c# asp.net .net

我有一个依赖于母版页的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值,但这不是我在这里寻找的答案。

谢谢您的输入。

2 个答案:

答案 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.GetRequest.Params,则应在ddlProdukt.UniqueID上调用它,因为分隔符在.ClientID上是'$'而不是'_'< / p>