0

Page_LoadWebフォームのメソッドに次のコードがあります。

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取得するクリックイベントハンドラーを持っています:SelectedValueSelectList

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およびLinkBut​​tonの定義です。

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

結果のマークアップ:

<select name="CountrySelector" id="CountrySelector">
    <option value="http://google.com">UK</option>
    <option value="http://microsoft.com">US</option>
    <option value="http://apple.com">FR</option>
</select>
<a id="CountrySelectButton" href="javascript:__doPostBack('CountrySelectButton','')">Go</a>

編集終了

ViewStateは有効になっていSelectedValueますが、実際に選択されているアイテムに関係なく、プロパティはリストの最初のアイテムのみを返します。明らかな何かが欠けていることは確かですが、問題を見つけることができません。どんな助けでも大歓迎です。

前もって感謝します。

デイブ

4

2 に答える 2

0

MyButton.Click + = ...ステートメントを(!IsPostBack)のようにラップします

if(!IsPostBack)
{
   MyButton.Click += new EventHandler(MyButton_Click);
   BindSelectList();
}
于 2012-11-12T14:40:37.590 に答える
0

問題がjqueryuiダイアログに起因していることは正しいです...非表示フィールドを使用してドロップダウンリストの値を記録することで、これを回避できます。次に、コードで非表示フィールドを参照します。

フロントエンドは次のようになります。

<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;
于 2012-11-12T16:55:08.370 に答える