2010-12-13 13 views
3

モデルデータを外部のJavaScriptに渡す方法はありますか?私はGoogleマップを使用してプッシュピンを表示しています。地図はJavaScript経由でロードされています。同時に、リクエスト時に取得されたモデルデータの一部として、緯度、経度情報のリストがあります。私は自分のHTMLに隠れ変数の長いリストを持っていないし、私のjavascriptで必要な情報(緯度/経度)をフェッチするためにサーバーにもう一度ajax呼び出しを減らしたくない。これを効率的に行う方法はありますか?モデルデータを外部のJavaScriptに渡す

ありがとうございました。

答えて

0

短い答えは「いいえ」です。

ビューの横に生データモデルを戻す必要がある場合は、唯一の方法はビューにデータを埋め込むことです。二つのオプションがある:

HTML要素(厄介IMOの一種)において、スクリプトで

<div id="myData" data-model="{&quot;Name&quot;: &quot;Jason&quot;}"></div> 

<script> 
    var myData = {Name: Jason}; 
</script> 

ないHTMLエスケープがないので、私は第二の方法を好みます。

私はこれをやらなければならないのは辛いことですが、1つのリクエストは1つのリクエストです...それはただ1つのデータストリームです。この方法でのデータのブートストラップはかなり一般的です。したがって、将来のバージョンのMVCでは、より洗練された方法で返すことができます(ただし、上記の例のように見えるでしょう)。

これ以外にも、前述のとおり、JSONレスポンスでモデルを受け取るように余分なリクエストを行うことができます。

編集:私はこれを支援するために私の袖をのHtmlHelperを持っていた

...

public static MvcHtmlString ToScriptVariable<T, TMember>(this T value, Expression<Func<T, TMember>> expression) where T : class 
{ 
    var member = expression.Body as MemberExpression; 
    if (member == null) 
     throw new ArgumentException("Expression must be a member expression.", "expression"); 

    var expressionValue = expression.Compile()(value); 
    var serializer = new JavaScriptSerializer(); 
    var seralizedData = serializer.Serialize(expressionValue); 

    var tag = new TagBuilder("script"); 
    tag.Attributes.Add("type", "text/javascript"); 
    tag.InnerHtml = String.Format(CultureInfo.InvariantCulture, "var {0} = {1};", member.Member.Name, seralizedData); 

    return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 
} 

使用法:

<%: Html.ToScriptVariable(x => Model.MyData) %> 

結果:

<script type="text/javascript">var MyData = "(whatever)"</script> 
+0

そこに他の2つのオプションのチェック[this](https://forums.asp.net/t/2036219.aspx?How+to+pass+model+data+to+javascript+file+)と[this](https:// blog.mariusschulz.com/2014/02/05/passing-net-server-side-data-to-javascript)に投稿してください。希望は誰かを助ける。 – stom

関連する問題