C# 另一个viewstate下拉列表问题

C# 另一个viewstate下拉列表问题,c#,asp.net,webforms,viewstate,C#,Asp.net,Webforms,Viewstate,我在web表单的页面加载方法中有以下代码: protected void Page_Load(object sender, EventArgs e) { CountrySelectButton.Click += new EventHandler(CountrySelectButton_Click); if (HomePage.EnableCountrySelector) //always true in in this case { if(!IsPost

我在web表单的
页面加载
方法中有以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    CountrySelectButton.Click += new EventHandler(CountrySelectButton_Click);

    if (HomePage.EnableCountrySelector) //always true in in this case
    {
        if(!IsPostBack)
            BindCountrySelectorList();
    }
}
BindCountrySelectorList
方法如下所示:

private void BindCountrySelectorList()
{
    NameValueCollection nvc = HttpUtility.ParseQueryString(HomePage.CountryList);

    var ds = nvc.AllKeys.Select(k => new { Text = k, Value = nvc[k] });

    CountrySelector.DataSource = ds;
    CountrySelector.DataTextField = "Text";
    CountrySelector.DataValueField = "Value";
    CountrySelector.DataBind();
}
我有一个
LinkButton
click事件处理程序,它从
SelectList
中获取
SelectedValue
,如下所示:

void CountrySelectButton_Click(object sender, EventArgs e)
{
    //get selected
    string selectedMarket = CountrySelector.SelectedValue; //this is always the first item...

    //set cookie
    if (RememberSelection.Checked)
        Response.Cookies.Add(new HttpCookie("blah_cookie", selectedMarket) { Expires = DateTime.MaxValue });

    //redirect
    Response.Redirect(selectedMarket, false);
}
编辑:

这是DDL和LinkButton的定义:

<asp:DropDownList runat="server" ID="CountrySelector" />
<asp:LinkButton runat="server" ID="CountrySelectButton" Text="Go" />

结束编辑

ViewState已启用,但无论实际选择了哪个项目,
SelectedValue
属性仅返回列表中的第一个项目。我肯定我遗漏了一些明显的东西,但我找不到问题所在;非常感谢您的帮助

提前谢谢


Dave

将MyButton换行。单击+=。。。(!IsPostBack)like中的语句


您的问题源于jquery ui对话框,这是正确的。。。您可以通过使用隐藏字段来记录dropdownlist的值来解决这个问题。然后在代码中,引用隐藏字段

前端可能看起来像:

<div id="myModal" style="display: none;">
        <asp:DropDownList runat="server" ID="SelectList" />
        <asp:LinkButton runat="server" ID="MyButton" Text="Go" />
    </div>
    <input type="hidden" id="countryVal" runat="server" />
    <a id="choose" href="#">Choose</a>
    <script type="text/javascript">
        $(document).ready(function () {

            $('#choose').click(function () {
                $('#myModal').dialog({
                });
                return false;
            });

            $('#<%= SelectList.ClientID %>').change(function () {
               var country = $(this).val();
               $('#<%= countryVal.ClientID %>').val(country);
            });
        }); 
    </script>

@MikeSmithDev-有什么特别想看的吗?这是所有的代码背后正在这样做,我不知道我还能提供什么。是的,代码前面的选择列表。更多关于LinkButton的事件处理程序。链接按钮代码前面。你有没有调试过,看看发生了什么,比如你不知何故在某处重新绑定?@MikeSmithDev-我已经添加了DDL和LinkButton代码。我从事件处理程序中删除了所有其他内容,并在调试时检查SelectedValue,以确保它不是由任何其他操作引起的。我看不到任何地方它可能会再次重新绑定,但这是一个有效的问题,所以我将返回代码并检查…你能粘贴下拉列表的结果html吗?它可以让您更深入地了解实际写入客户机的内容。问题可能发生在流程的这一步中。如果您只做了这一步,您的代码就可以工作了。我怀疑还有更多的事情你没有表现出来。。。比如ID如何从“SelectList”更改为“CountrySelector”。runat=server标记的默认ID重命名看起来更像是感谢您的建议,但这会阻止我的按钮在回发时绑定其事件,并且无助于解决当前的问题。如果使用隐藏字段,则必须执行附加验证,如果您坚持使用DropDownList,则必须执行该验证。另一种方法是绑定
$(document)。在('submit',function()…
上,抓取jQuery模态容器,并将其追加回
中。jQuery模态将输入元素移到
元素之外,这就是为什么值的行为不符合您的预期。建议不错。我需要检查一下。
if(!IsPostBack)
{
   MyButton.Click += new EventHandler(MyButton_Click);
   BindSelectList();
}
<div id="myModal" style="display: none;">
        <asp:DropDownList runat="server" ID="SelectList" />
        <asp:LinkButton runat="server" ID="MyButton" Text="Go" />
    </div>
    <input type="hidden" id="countryVal" runat="server" />
    <a id="choose" href="#">Choose</a>
    <script type="text/javascript">
        $(document).ready(function () {

            $('#choose').click(function () {
                $('#myModal').dialog({
                });
                return false;
            });

            $('#<%= SelectList.ClientID %>').change(function () {
               var country = $(this).val();
               $('#<%= countryVal.ClientID %>').val(country);
            });
        }); 
    </script>
var selected = countryVal.Value;