2014-05-12 1 views
0

나는 asp.net에서 드롭 다운 메뉴의 포스트 백을 제어 할 수있는 문제가 텍스트 상자에 사용자 유형은 모두 드롭 다운 상자가 다시 게시하지하는 경우는, 위의 스냅 같이포스트 백을 프로 그램으로 제어하는 ​​방법은 무엇입니까?

enter image description here

. 이것을 어떻게 할 수 있습니까?

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!IsPostBack) 
      { 
       DataTable Product = new DataTable(); 
       SqlConnection conn = new SqlConnection(connection); 
       SqlDataAdapter da = new SqlDataAdapter("SELECT ProductID, ProductName FROM dbo.Product", conn); 
       conn.Open(); 
       da.Fill(Product); 
       conn.Close(); 
       drp1.DataSource = Product; 
       drp1.DataValueField = "ProductID"; 
       drp1.DataTextField = "ProductName"; 
       drp1.DataBind(); 
       drp1.Items.Insert(0, new ListItem("---Select Product---", "0")); 
      } 
     } 
     catch (Exception ex) 
     { 
      Response.Write(ex.Message); 
     } 
    protected void drp1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     int ProductID = Convert.ToInt16(drp1.SelectedValue); 
     DataTable Signing = new DataTable(); 
     SqlConnection conn = new SqlConnection(connection); 
     SqlDataAdapter da = new SqlDataAdapter("SELECT SigningID, SigningDetail FROM dbo.Signing WHERE ProductID = "+ ProductID, conn); 
     conn.Open(); 
     da.Fill(Signing); 
     conn.Close(); 
     drp2.DataSource = Signing; 
     drp2.DataValueField = "SigningID"; 
     drp2.DataTextField = "SigningDetail"; 
     drp2.DataBind(); 
     drp2.Items.Insert(0, new ListItem("---Select Signing Detail---", "0")); 
    } 

내 관심사는 텍스트에서 뭔가 사용자 유형 드롭 다운 상자의 값을 상자 때 트랜잭션 테이블에 삽입되지해야하지만, 텍스트 상자의 값이 삽입 얻을해야한다는 것입니다. AutoPostBack 속성을

환호를 변경 드롭 다운 상자의 테이블에

덕분에 값을 삽입하는 버튼에 OnClick 이벤트,

+0

특정 컨트롤 (텍스트 상자)이 변경 될 때 전체 페이지를 새로 고치지 않으려면? –

+0

텍스트 상자와 드롭 다운 목록간에 명백한 관계가 없기 때문에 텍스트 상자는 어떤 이벤트도 트리거해서는 안됩니다. 디자인 타임 화면 캡처 대신 코드를 게시 할 수 있습니까? – user3373870

+0

고객 측 코드로 질문을 편집하십시오. 귀하가하려는 일이 명확하지 않으므로 다시 말하십시오. – tatigo

답변

0

이 경우 TextBox.Text 속성이 비어 있으면 작업을 수행하고 그렇지 않으면 변경 사항을 무시해야합니다. 물론

protected void drp1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
//Check TextBox first 
if(TextBoxID.Text==string.Empty) 
{ 
     int ProductID = Convert.ToInt16(drp1.SelectedValue); 
     DataTable Signing = new DataTable(); 
     SqlConnection conn = new SqlConnection(connection); 
     SqlDataAdapter da = new SqlDataAdapter("SELECT SigningID, SigningDetail FROM dbo.Signing WHERE ProductID = "+ ProductID, conn); 
     conn.Open(); 
     da.Fill(Signing); 
     conn.Close(); 
     drp2.DataSource = Signing; 
     drp2.DataValueField = "SigningID"; 
     drp2.DataTextField = "SigningDetail"; 
     drp2.DataBind(); 
     drp2.Items.Insert(0, new ListItem("---Select Signing Detail---", "0")); 
    } 
} 

, 당신은

1

이있다.

0

내가 제대로 질문을 이해 해요 경우, 당신이 기반 조건부 AutoPostBack을 드롭 다운을 만드는 방법을 필요가 있다고 생각 당신이 당신의 TextBox 컨트롤 준 어떤 ID로 TextBoxID을 변경해야합니다 텍스트 상자에 텍스트가 있는지 여부.

이 작업을 수행하려면 jQuery 마법을 사용해야합니다. 먼저 두 드롭 다운의 AutoPostBack 속성을 false (나를 신뢰)으로 설정합니다.

다음 페이지 (또는 어디든지 당신이 자바 스크립트를 유지)의 하단에 코드를 추가 : 그래서 이것은 무엇 할 것, 언제 텍스트가 텍스트 상자에 입력

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 

<script type="text/javascript"> 
    var usingTextBox = false; 

    function FixDropDowns() 
    { 
     if (usingTextBox) 
     { 
      // If they are typing in the text box, then you do not want a postback. 
      // So lets make the .change() function handler empty. 
      $('#<%= drp1.ClientID %>').change(function() { 
       // do nothing 
      }); 
      $('#<%= drp2.ClientID %>').change(function() { 
       // do nothing 
      }); 
     } else { 
      // They are not typing in the text box, so make dropdown postback. 
      $('#<%= drp1.ClientID %>').change(function() { 
       __doPostBack('<%= drp1.ClientID %>', ''); 
      }); 
      $('#<%= drp2.ClientID %>').change(function() { 
       __doPostBack('<%= drp2.ClientID %>', ''); 
      }); 
     } 
    } 

    $(function() { 
     FixDropDowns(); 
     $('#<%= txtTextBox.ClientID %>').on('input', function() { 
      var txtValue = $('#<%= txtTextBox.ClientID %>').val(); 
      if (txtValue == '') 
       usingTextBox = false; 
      else usingTextBox = true; 
      FixDropDowns(); 
     }); 
    }); 

</script> 

의 드롭 다운은 어떤 것 없다 더 긴 포스트. 텍스트 상자가 비어있는 경우 드롭 다운이 다시 게시됩니다! 나는 이것이 당신이 성취하려고 시도한 것이라고 생각합니다.

+0

AutoPostBack을 false로 설정하면 충분합니다. – tatigo

+0

@tatigo - AutoPostBack을 False로 설정하면 단순히 포스트 백이 발생하지 않습니다. 질문을 이해하고 있다면 텍스트 상자에 텍스트가 포함되어 있지 않으면 항상 게시물을 다시 게시하려고합니다. – Icemanind

+0

질문은 실제로 이해하기 어렵습니다 – tatigo

관련 문제