2011-10-19 8 views
0

JavaScriptのロジックのルーティング情報がクライアント上に必要です。私はすぐに実行可能な解決策を持っていますが、それは一種の気がします。私はページに隠しフィールドを注入しています。私はもっ​​と良い方法がなければならないと思っています。これは私が現在やっていることです:クライアントに必要なMVCルーティング情報?

<input type="hidden" id="rt" value="@string.Format("{0}://{1}{2}",Request.Url.Scheme,Request.Url.Authority,Url.Content("~"))"/> 

答えて

1

ええ、非常にclunky。実際には、あなたのJavaScriptの絶対URLは必要ありません。相対URLで動作します。たとえば、次のように

@Html.Hidden("rt", Url.Content("~/")) 

は今隠しフィールドを使用すると、あなたのシナリオとまさにあなたがJavaScriptでやろうとしているの詳細を知らなくても言うことは良いことかではありませんがあるかどうか。しかし、非常に一般的なシナリオを考えてみましょう。フォームをAJAXifyしたいとします。

$(function() { 
    $('#myform').submit(function() { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      success: function(result) { 
       // TODO: do something with the results 
      } 
     }); 
     return false; 
    }); 
}); 

は、我々はもはやjavascriptの前部任意のハードコーディングされたURLまたは隠されたフィールドを必要とする方法を参照してくださいしない:この場合、あなたは、フォームとを生成するために、あなたのビューでHTMLヘルパーを使用します。

また別のシナリオを考えてみましょう。アンカーをAJAXifyしたいとします。同じこと。

$(function() { 
    $('#mylink').click(function() { 
     $.get(this.href, function(result) { 
      // TODO: do something with the results 
     }); 
     return false; 
    }); 
}); 

か、まだ別のシナリオ:次に、あなたのアンカーとを生成するHtml.ActionLinkを使用しています。 AJAXリクエストをいくつかのコントローラアクションに送信したいと思っているdivコンテナがあります。この場合、あなたは* HTML5データ - を使用することができDIVの属性:

<div id="mydiv" data-url="@Url.Action("Foo", "Home")">Some contents</div> 

、その後:

$(function() { 
    $('#mydiv').click(function() { 
     $.get($(this).data('url'), function(result) { 
      // TODO: do something with the results 
     }); 
     return false; 
    }); 
}); 

OK、今あなたはもはや隠しフィールドを必要としていることがわかりません。いつもより良いことが可能です。

+0

お返事ありがとうございます。私は隠されたフィールドを排除しようとしていました。ページ上に隠しフィールドを挿入することは唯一の方法ですか? – coding4fun

+0

@ user127954、いいえ、非表示のフィールドは必要ありません。より良い方法があります。それは単にクライアント側で何をしようとしているかに依存します。 –

+0

かなり私はちょうど私のサイトのベースURLのために私のjavascriptでそれを使用しているので、私はJavaScriptを(ハードコードURLをしたくない)変更する必要はありません変更します。 – coding4fun

関連する問題