2011-04-21 2 views
1

나는 .NET newb이므로 나와 함께하시기 바랍니다.버튼이 자체 OnClientClick을 업데이트 한 다음 실행합니까?

온라인 상점에서 일하고 있습니다. 방문자는 원하는 수량을 선택한 다음 버튼을 클릭하여 해당 항목 (둘러보기)의 날짜를 선택해야합니다.

두 개의 버튼이 있습니다. 하나는 선택 사항을 읽고 다른 하나는 OnClientClick 값을 업데이트하고 하나는 클릭하면 팝업을 실행합니다. 이 프로젝트를 수행하려면 하나의 버튼으로 전체 프로세스를 수행해야합니다. 여기 내역의 거친 윤곽이있다 :

설정 버튼 :

//Calculates parameters to send to popup based on control contents. 
    public void btnSetup_Click(object sender, EventArgs e) 
    { 
     StringBuilder sbParams = new StringBuilder(); 
     TotalQty += basketItem.Quantity;      
     Sku = variant.Sku;       
     sbParams.Append(string.Format("?sku={0}&Qty={1}",Sku.Substring(0,4),TotalQty)); 

     popup = string.Format("window.open('http://somesite.ocm/cal.asp{0}','Reservation Calendar','width=265,height=465')",sbParams.ToString()); 
    btnCalendar.OnClientClick = popup; 
    } 

달력 버튼 :

// Shows popup via OnClientClick 
    public void btnCalendar_Click(object sender, EventArgs e) 
    { 
     AddPopup.Show(); 
    } 

그것은 두 단계 프로세스로 잘 작동 설정을 클릭 한 다음 일정 버튼을 클릭합니다. 설정 코드를 캘린더 루틴으로 옮기면 실패합니다. 클릭하면 캘린더 버튼의 OnClientClick이 설정되지 않았기 때문에 이것이 확실합니다.

전체 프로그램을 재구성하지 않고이를 수행하는 최상의 방법 유형은 무엇입니까? .NET 프로그래밍을 처음 접했을 때 나는 그 일을 망치고 싶지 않습니다.

+0

그래서 사용자는 날짜를 기준으로 항목을 팝업하여 팝업에서 항목을 선택하고 계속 진행할 수 있어야합니다. – R0MANARMY

+0

예, Romanarmy, 맞습니다. – Deverill

답변

1
내가 설정에 코드를 변경 할

사용자가 페이지의 설정/준비의 대부분을 수행하는 전형적인 인 Page_LoadButton :

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     StringBuilder sbParams = new StringBuilder(); 
     TotalQty += basketItem.Quantity; 
     Sku = variant.Sku; 
     sbParams.Append(string.Format("?sku={0}&Qty={1}", 
      Sku.Substring(0,4),TotalQty)); 
     popup = string.Format("window.open('http://somesite.ocm/cal.asp{0}', 
      'Reservation Calendar','width=265,height=465')", 
      sbParams.ToString());   
     btnCalendar.OnClientClick = popup; 
    } 
} 

문제는 서버 쪽 방법을 사용하여 클라이언트 쪽 동작에 무언가를 추가하려고하는 것입니다. 클라이언트 측 메서드가 먼저 발생하고 서버 측이 먼저 실행되므로 함수 서버 측을 추가하면 클라이언트 측 작업이 이미 실행 지점을 통과하고 아무 작업도 수행하지 않습니다.

Button이 다르게 작동하거나 여러 번 반복해야하는 경우 발생하는 일부 바인드 작업 중에 설정을 수행해야합니다. 처음에는 Page_Load에서 수행하지 않으면됩니다.

popup = string.Format("window.open('http://somesite.ocm/cal.asp{0}', 
    'Reservation Calendar','width=265,height=465'); return false;", 
    sbParams.ToString());   

을 주목 return false;을 : 당신이 당신의 OnClientClick가 될 변경할 수 있도록 당신도 서버 측 이벤트에 대한 관심이 왜 예에서

나는 확실하지 않다. 이렇게하면 창이 열리 며 서버에 다시 게시하지 않도록 페이지에 알릴 수도 있습니다.

+0

Thanks Kelsey. Page_Load에서 버튼을 누르지 않은 이유는 버튼을 클릭하기 전에 수량이 변경 될 수 있기 때문입니다. 캘린더에 갈 준비가되면 다시 평가해야합니다. 서버 측은 수량이 설정된 곳입니다. – Deverill

+0

그것은 내가 찾던 답변이 아니지만, 정말 좋은 정보가 담겨 있으므로 대답으로 표시하고 있습니다. 목표에 달렸습니다. 더 좋은 제안은 없습니다. 도움을 청할만한 모든 이유가 있습니다. – Deverill

0

다음 코드 스 니펫이 도움이 될 수 있습니다.

<asp:Button id="btnSubmit" runat="server" onclick="btnSubmit_Click" OnClientClick="javascript:ShowPopup();"" ></asp:Button> 

JS

function ShowPopup() 
{ 
//Code for popup window 

} 
+0

나는 여기서 어떤 질문에 답하고 있는지 알아 내려고 노력 중입니다 ... – NotMe

관련 문제