3

アンカータグをクリックすると、コントローラーのアクションが実行されます。クエリ文字列で渡されるパラメータがあります。以下のコードを使用して、リストをシリアル化されたjsonstingに変換しています。

public ActionResult EmployeeVote(string regionID)
 {
   var nomineeList = NomineeModel.GetNomineeByRegionID(Convert.ToInt16(regionID));
   ViewBag.NomineeList = JsonConvert.SerializeObject(nomineeList,Formatting.None);
   return View(ViewBag);
 }

このjson文字列文字列の作成方法に問題があると思います。

[{"Id":0,"EmpId":1,"FirstName":"First Last","Email":"mail@xyz.com","Description":null,"RegionID":0}]

クライアント側。しかし、モデルリストは逆シリアル化中にエラーが発生します。

$(function () {
            var modelList = JSON.parse('@ViewBag.NomineeList');
           $(modelList).each((function () { //some logic});
 });

各ループを実行してモデルリストを反復処理し、動的要素を作成します。何か助けは??

4

2 に答える 2

5

問題は@ViewBag.NomineeList、json文字列をHTMLエンコードすることです。これを防ぐ必要がありますが、それでも文字列が有効なjavascript文字列であることを確認してください。

コントローラ内:

ViewBag.NomineeList = new JavaScriptSerializer().Serialize(
    JsonConvert.SerializeObject(nomineeList, Formatting.None)
    );

JavaScriptSerializer、文字列がJSで使用するために保存されていることを確認するため、新しい行がエンコードされます。

次に、ビューで:

var modelList = JSON.parse(@Html.Raw(ViewBag.NomineeList));
  • Html.RawHTMLエンコーディングを防ぐために使用します
  • これはすでにによって行われているため、これを引用符で囲まないでくださいJavaScriptSerializer

更新:を使用せずに機能させる方法の例を追加しましたJavaScriptSerializer。しかし、私は潜在的な危険性を再考し、それを取り除きました。を使用して上記のアプローチに固執すると、JavaScriptSerializerより安全になります。

于 2013-02-14T10:58:43.303 に答える
0

アドホックソリューションは次のとおりです。
「」を置き換えます

ViewBag.NomineeList = JsonConvert.SerializeObject(nomineeList,Formatting.None).Remove(" "");

また、http://json.codeplex.com/を使用してみてください。

于 2013-02-14T10:50:08.133 に答える