2012-11-20 24 views
0

我試圖實現手動回發觸發代碼不附加到控件。我不想使用AJAX PageMethods,因爲我需要在回發期間引用某些控件,並且希望結果更新爲頁面上的gridview。ASP.Net手動回發不工作從動態創建linkbutton

我已經有其他兩種方法可以工作,但由於某種原因我的第三個方法沒有部署,但確實在我的開發機器上正常工作。

代碼後面(的Page_Load)

 switch (Request["__EVENTARGUMENT"]) { 
      case "ItemReserved": 
       GetAllStock(); 
       break; 
      case "PendingItemRemoved": 
       PopulatePending(); 
       break; 
      case "StockInSubmitted": 
       SubmitNewStock(); // this doesn't fire 
       break; 
     } 

我插線儘快寫入日誌文件中的代碼達到「SubmitNewStock()」。日誌寫在我的開發機器上,但不是在網絡服務器上。其他兩個回發按預期工作。

頁腳本

function ctxMenu_Reserve() { 
     PageMethods.SetItemReserved(CGRefForMenu); 
     __doPostBack('', 'ItemReserved'); 

     HideMouseMenu(); 
    } 

    function ctxMenuPending_Remove() { 
     PageMethods.RemovePendingItem(CGRefForPendingMenu); 
     __doPostBack('', 'PendingItemRemoved'); 
    } 

    function StockINSubmit(){ 
     SubmitPlaceHolder = document.getElementById('<%=PlaceholderStockInSubmit.ClientID %>'); 
     SubmitPlaceHolder.innerHTML = "Processing..."; 

     __doPostBack('', 'StockInSubmitted'); //Causes postback, but relevant code is not triggered once on my live server 
    } 

有誰知道這是爲什麼不工作,一旦我部署站點到我的生活的Web服務器?

我應該提到StockINSubmit()是從一個動態創建的客戶端鏈接按鈕啓動的,該按鈕位於模式彈出框內。

 PlaceholderStockInSubmit.Controls.Add(
      new LinkButton() { 
       OnClientClick = "StockINSubmit()", 
       Text = "Submit", 
       ID = "lnkStockInSubmit" 
      }); 

StockINSubmit()替換包含該按鈕的DIV的HTML內容。 (所以我點擊「提交」,它會更改爲「處理」標籤)。我無法看到爲什麼會導致任何問題的原因,但認爲這是值得一提的。

+0

不知道,但一旦我試圖調用__doPostBack只意識到,__doPostBack只會呈現如果有需要JS回發模擬器的控件。所以我在頁面上添加了一個鏈接按鈕。檢查__doPostBack是否在呈現的標記中。 – MatthewMartin

+2

我已經回答了關於如何使用託管代碼正確創建__doPostBack的問題:http://stackoverflow.com/questions/10483271/need-to-call-server-side-event-using-dopostback/10483439#10483439 – CAbbott

+0

@MatthewMartin __doPostback確實呈現給頁面,因爲我有相當多的與回發關聯的控件。 – user1830285

回答

0

我終於想通了,發生了什麼事......

動態創建LinkBut​​ton的是執行回發作爲其服務器點擊(的onClick)事件的一部分(雖然我沒有結合無論如何它)。在我的開發機器上,OnClientClick事件回發正在擊敗OnClick回發,因此所有預期的代碼都正常運行。

出於某種原因,一旦部署到服務器,服務器OnClick事件正在擊敗OnClientClick事件,因此發生完整回發時沒有OnClientClick事件提供的附加__EVENTARGUMENT信息。

爲了解決這個問題,我發現another post on this site解釋瞭如何取消默認回發,但仍然執行客戶端JavaScript。

我的服務器端代碼現已更新如下:

LinkButton newButton = new LinkButton() { 
     OnClientClick = "StockINSubmit()", 
     Text = "Submit", 
     ID = "lnkStockInSubmit" 
    }; 
    newButton.Attributes.Add("onClick", "return false;"); 
    PlaceholderStockInSubmit.Controls.Add(newButton); 

也就是現在的工作就像一個魅力:)

感謝您的幫助球員。