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に渡すより良い方法があるかもしれませんか?

ありがとう、ジェーニャ

4

1 に答える 1

3

私の質問は次のとおりです。シリアル化されたすべてのポイントをコントローラーから文字列にこのように渡しても問題ありませんか? すべてのポイントを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文字列の JavaScript 配列ではなく、JSON 文字列をパラメーターとして期待する場合は、次のように渡すことができます。

@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 に答える