0

我有 ASP.Net MVC3 应用程序。我的任务是从文件中读取点并显示它们。对于从文件中读取点,我使用 DLL。我用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吗?

谢谢,振亚

4

1 回答 1

3

我的问题是:以这种方式将所有序列化点从控制器传递到 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>
于 2013-10-20T12:20:03.433 回答