2012-11-12 1 views
0

나는이 웹 양식의 Page_Load 방법에 다음 코드 :또 다른 viewstate가 DropDownList로 문제

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 클릭 이벤트가 처리기는 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" /> 

결과 태그 :

<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 특성 오직 돌아온다. 어떤 항목이 실제로 선택되었는지에 관계없이 목록의 첫 번째 항목. 나는 확실한 것이 빠졌음을 확신하지만 문제를 발견 할 수 없다. 어떤 도움을 많이 주시면 감사하겠습니다.

미리 감사드립니다.

데이브

+0

더 많은 코드가 도움이 같은

프런트 엔드는 볼 수 있었다. – MikeSmithDev

+0

@MikeSmithDev - 특히보고 싶은 것은 무엇입니까? 이것은 뒤에있는 모든 코드가 수행하고 있으므로 내가 제공 할 수있는 것이 무엇인지 확신 할 수 없습니다. – DaveParsons

+0

예, 선택 목록의 코드 앞부분입니다. LinkButton에 대한 이벤트 처리기에 대해 자세히 설명합니다. 링크 버튼 코드 앞. 어떤 일이 일어나고 있는지 디버깅 해봤습니까? 어딘지 모르게 어딘가에서 다시 바인딩하고 있습니까? – MikeSmithDev

답변

1

당신은 당신의 문제는 JQuery와 UI 대화 상자에서 비롯된 것이 올바른지 같은 ... 당신이 얻을 수 있습니다 숨겨진 필드를 사용하여 드롭 다운 목록의 값을 기록합니다. 그런 다음 코드에서 숨겨진 필드를 참조하십시오.

<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; 
+0

숨겨진 필드를 사용하는 경우 DropDownList를 사용하면 이미 얻은 추가 유효성 검사를 수행해야합니다. 대안은'$ (document) .on ('submit', function() ...)을 jQuery 모달 컨테이너를 잡고 '

'에 다시 추가하는 것입니다 .jQuery 모달은 입력 요소를 ''요소가 그 이유는 값이 예상 한대로 동작하지 않는 이유입니다. –

+0

멋진 제안. – MikeSmithDev

0

랩 내부의 MyButton.Click + = ... 문 (! IsPostBack을)

if(!IsPostBack) 
{ 
    MyButton.Click += new EventHandler(MyButton_Click); 
    BindSelectList(); 
} 
+0

제안 해 주셔서 감사합니다. 그러나이 이벤트는 내 단추가 포스트 백에 바인딩 된 이벤트를 갖지 못하도록하고 현재 문제를 해결하지 못했습니다. – DaveParsons