2015-09-05 48 views
0

這裏是我的問題:在Asp.net代碼中使用Javacscript參數包含在javascript函數

<script> 
function processRequest(username, sessionToken, connectionId, processType,friendUser) { 
    var request = { Username: username, Password: null, SessionToken: sessionToken, ConnectionId: connectionId, ProcessType: processType }; 
    $.ajax({ 
     type: "POST", 
     url: '@ConfigurationSettings.AppSettings["APIURL"]/people/ProcessConnectRequest', 
     data: request, 
     datatype: "jsonp", 
     success: function(result) { 
      if (result === "PROCESSED") { 
       $('#item_' + connectionId).remove(); 

       var htmlContent ='<div class="col-lg-4 gray-box">' 
          +'<div class="general-item-list" id="requestList">' 
           + '<div class="item">' 
           +  '<div class="item-head">' 
           +  '<div class="item-details">' 
           +  '@Html.Action("LoadPeopleStatus", "People", new { id ="abc"})' 
           +  '</div>' 

           + '</div>' 
           + '</div>' 
          + '</div>' 
         + '</div>'; 

       $('#containerBox').append(htmlContent); 
      } 
     } 
    }); 
} 

我想friendUser參數來代替id ="abc",但沒有成功。任何想法?

+0

您正在將客戶端邏輯與服務器端模板混合使用。這不是工作,永遠。 –

+0

謝謝,我會更改我的代碼 – HideTran

+0

試試這個'id = friendUser' –

回答

0

很久以前,Html.Action就會在客戶端接收到頁面之前在服務器上呈現,更不用說開始處理腳本或執行成功回調(使用您想使用的參數)。

而不是構建HTML內容來追加到您的容器,您可以發送回您的POST請求的結果,檢查狀態代碼而不是「PROCESSED」作爲您的成功指標,並追加結果(應該有內容類型「text/html」)到您的容器。

或者,您可以發送帶有狀態標誌的JSON對象,並將HTML內容作爲單獨的屬性發回。

爲了簡單起見,我希望使用狀態碼作爲您的成功指示器,這意味着您可以簡單地追加從服務器接收到的響應。

請確保您將內容作爲partial view返回,而不是視圖結果(假定爲完整頁面),因此如果有佈局,則不包含佈局。

您需要friendUser添加作爲參數傳遞給您的請求,除非它可以派生或從現有的請求的一個推斷參數

編輯

如果你不是願意或能夠改變API端點(儘管您應該能夠使用accepts header和/或帶有附加參數的重載來區分現有的返回行爲和新的HTML響應),您需要在成功回調中創建第二個AJAX請求第一個(在建立正確的處理之後),傳遞friendUser作爲o的一部分f URL或作爲參數。這可能是一個GET請求,並且需要將一個控制器操作從操作返回HTML。假設它是某種狀態或配置文件小部件,它可能是服務器緩存的理想候選者。鑑於您將有兩個HTTP連接的延遲,並且處理初始POST請求以處理您將希望儘快製作並返回小部件。

我建議還在這裏返回一個PartialView,並將當前在腳本標籤內的HTML放在該視圖中,然後使用傳遞的model/ViewData中的friendUser數據將該Action呈現在該視圖中的適當位置來自控制器的行動。

相關問題