2013-10-20 113 views
0

我有ASP.Net MVC3應用程序。我的任務是從文件中讀取點並顯示它們。爲了從文件中讀取我使用的DLL。我用javascript繪製它們。 這裏是我的代碼:ASP.Net從控制器傳遞數組到視圖到javascript

// Controller 
{ 
    IntPtr lib = LoadLibrary("lib.dll"); 

    // getting points from DLL. I get then as array of strings to serialise later 
    string[] points = new string[0]; 
    GetArrayPointsAsStrings(points); // I get coordinates - [x1, y1, z1, x2, y2, z2, ..] 

    FreeLibrary(lib); 

    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    serializer.MaxJsonLength = Int32.MaxValue; 
    string serialized_points = serializer.Serialize(points); 

    return View(new MyModel(serialized_points)); 
} 

// Model 
public class MyModel 
{ 
    public string Points { get; private set; } 
} 

// View 
@{ 
var m = Model; 
var array_of_strings_points = m.Points; 
} 

// object from javascript 
var js_obj = new js_obj(); 
var points_string = '@Html.Raw(@array_of_strings_points)'; 
js_obj.DrawPoints(points_string); 

//js 
//.. and here in DrawPoints() I parse the string of points and draw point 

我的問題是:是否可以將所有的序列化點從控制器傳遞到字符串的JavaScript這樣?可能有更好的方法將所有的點傳遞給JavaScript?

感謝, 振亞

回答

2

我的問題是:是否可以將所有的系列化百分點 控制器傳遞到字符串的JavaScript這樣?可能有更好的方法通過 所有指向JavaScript?

在你的模型上保持真正的CLR類型(string[])。你不需要是JSON序列化在你的控制器:

public class MyModel 
{ 
    public string[] Points { get; set; } 
} 

然後讓你的控制器填充,並視圖模型傳遞給視圖:

string[] points = ... 
MyModel model = new MyModel(); 
mode.Points = points; 
return View(model); 

終於在自己的看法:

@model MyModel 
... 

<script type="text/javascript"> 
    var js_obj = new js_obj(); 
    var points = @Html.Raw(Json.Encode(Model.Points)); 
    js_obj.DrawPoints(points); 
</script> 

現在,如果您的js_obj.DrawPoints需要JSON字符串作爲參數而不是 字符串的JavaScript數組,您可以像這樣傳遞它:

@model MyModel 
... 

<script type="text/javascript"> 
    var js_obj = new js_obj(); 
    var points = @Html.Raw(Json.Encode(Model.Points)); 
    js_obj.DrawPoints(JSON.stringify(points)); 
</script> 
+0

感謝您的回答!但@ Html.Raw期望字符串..我無法傳遞字符串數組。這就是爲什麼我使用序列化程序的原因 – Zheden

+0

對不起,我在回答中犯了一個錯誤,並在將模型屬性傳遞給'Html.Raw'幫助器之前忘記了'Json.Encode'模型屬性。我已經用一個工作示例更新了我的答案。感謝您指出了這一點。 –

+0

謝謝!有效。我有最後一個問題:我使用JSON.stringify(points)後,如何在DrawPoints()中解析數組? var data_parsed = JSON.parse(i_points); data_parsed [1];或data_parsed.pop()不起作用。 – Zheden

相關問題