1

次のように、Javascript で使用Html.Raw(Json.Encodeして、MVC 3 asp.net (かみそり) アプリケーションのビューに渡された ViewModel プロパティの内容を取得します。

 var state = @(Html.Raw(Json.Encode(Model.State))); 

状態は私のモデルでそのように定義されています

 public class IndexViewModel
    {
       //..other props
        public string State { get; set; }


    }

FF、IE8 では魅力的に動作しますが、IE 9 では機能しません。

IE 9 で変更された上記のコードについて知っておくべきことはありますか? もしそうなら、あなたの JS で ViewModel データを取得するための代替手段は何でしょうか?

4

2 に答える 2

2

ここに代替案があります

モデルを見る

public class StuffVM : AsSerializable
{
    public List<Stuff> StuffList { get; set; }
}

基本クラス

public abstract class AsSerializable
{
    public string AsJson()
    {
        var serializer = new JavaScriptSerializer();
        return serializer.Serialize(this);
    }
}

見る

<script>
 var ViewModelData = @( Html.Raw(Model.StuffVM.AsJson()) );
</script>
于 2012-07-31T21:20:19.900 に答える
0

私はTravisのソリューションが本当に好きです。別の方法 (C# 3.0 以降を使用している場合) は、拡張メソッドを使用することです。

public static class ObjectExtensions
{
    static public string ToJson(this object model)
    {
        return new JavaScriptSerializer().Serialize(model);
    }
}

ただし、これは完全に哲学的な選択です...継承または拡張メソッドを使用するかどうか。私の個人的な選択は、少しクリーンでカップリングが少ないと感じる拡張メソッドです。それは私の意見です。

ただし、Travis の方法を使用すると、シリアライザーのインスタンスを 1 つだけ作成し、複数のシリアル化を実行する必要がある場合はそのインスタンスを再利用することができます。これにより、メモリの効率が向上します。拡張メソッドでそれを行うと、スレッドセーフではなくなります。

于 2013-07-06T18:07:55.880 に答える