2016-04-25 58 views
-1

我想將整個Model對象與另一個參數傳遞給js函數launchMyActivity()。但功能沒有得到它。當我做了aler(passedObject.length)它給不明身份。無法將Model對象傳遞給javascript函數

我試過其他的東西,但沒有任何工作。 Referred this but didnt worked

我不確定我的實現出了什麼問題。

型號:

public class RequestDTO 
{ 
    public HttpRequestBase RequestDto { get; set; } 
    public List<User> Users { get; set; } 
    public string ActionId { get; set; } 
    public string UserSampleID { get; set; } 
} 

查看:

@model RequestDTO 
<body> 
     @Scripts.Render("~/bundle/js/Area/SelectedStudentActivity") 
     <div class='popOver' style="z-index: 1012;"> 
      <div id='popOverMsg'>Select the student you want to Launch this Activity for:..</div><br /><br /> 
      @foreach(var user in Model.Users) 
      {     
       <a id="selectedAnchor" data-id="@user.id" style="cursor:pointer" onclick="launchMyActivity(@user.UserID,@Model)">@user.name</a><br /> 
      } 
     </div> 
</body> 

JS:

function launchMyActivity(studentSISId, requestDTO) 
{ 
    alert("Lenght : " + requestDTO.length); //I get undefined here 

    //Below this I need to make AJAX call and pass this requestDTO object. 
} 
+0

模型是一個C#對象,但您試圖將其傳遞到JavaScript。您需要對其進行jsonify,以便javascript瞭解它。 – nurdyguy

+0

試試這個:http://stackoverflow.com/questions/6201529/turn-c-sharp-object-into-a-json-string-in-net-4 – nurdyguy

+0

你在使用CSHTML嗎?試試這個函數launchMyActivity(studentSISId) alert(「Lenght:」+ @ Model.length); } – Shan

回答

0

你不應該傳球HttpRequestBase to javascript。首先,當你發現這是行不通的。您的C#代碼由您的Web服務器上的.Net運行時執行。 Javascript是通過客戶機上的Web瀏覽器執行的。這兩個是完全不同的執行系統,你不能真正在兩者之間傳遞語義。

HttpRequesBase,引用MSDN,「作爲類的基類,使ASP.NET能夠讀取客戶端在Web請求期間發送的HTTP值」。你的瀏覽器沒有asp.net,這個類和它的方法在客戶端上沒有意義。

您需要做的是定義您的型號。這是你的模型,你想在服務器和客戶端之間傳遞。從HttpRequesBase中提取對客戶端有意義的任何信息,並將其放入模型中。模型通常是一個沒有任何行爲(方法)的簡單類,並且只有很多屬性被簡單地序列化爲json。這樣的模型有很多很容易找到的信息。