<script type='text/javascript'>
...
</script>
とjavascriptのコードブロックを埋め込むために持っていますが、カミソリコードが.cshtml
ファイルからインクルード.js
ファイルにコンパイルされません。
この作品を作成するには?あるいは、他にも同様の効果をもたらすエレガントな方法がありますか?
ありがとうございます。
<script type='text/javascript'>
...
</script>
とjavascriptのコードブロックを埋め込むために持っていますが、カミソリコードが.cshtml
ファイルからインクルード.js
ファイルにコンパイルされません。
この作品を作成するには?あるいは、他にも同様の効果をもたらすエレガントな方法がありますか?
ありがとうございます。
私は時々、この問題に直面したとき、私は.cshtmlファイルにアクセス可能である.jsファイル内の関数を提供します...
// someFile.js
var myFunction = function(options){
// do stuff with options
};
// razorFile.cshtml
<script>
window.myFunction = new myFunction(@model.Stuff);
// If you need a whole model serialized then use...
window.myFunction = new myFunction(@Html.Raw(Json.Encode(model)));
</script>
必ずしも最良の選択肢が、それはやる場合私はあることに同意している間、あなたは多分試みることができる他の事は
//someFile.js
var options = $("#stuff").data('stuff');
// razorFile.cshtml
<input type="hidden" id="stuff" data-stuff="@model.Stuff" />
できません。また、試してみてください。それらを分けてください。これはまったく逆ですが、Unobtrusive JavaScriptを調べる必要があります。プロジェクト全体を通して適用されたデザインパターンは素晴らしい考えです。
私は控えめなJavaScriptを試しましたが、状況によっては、別の要素を更新するか、jQueryステートメント$( '#bla')。parent()を使って取得できる 'parent'要素を更新するか、レスポンスによると。私はそれを深く掘り下げていないかもしれませんが、AFAIKは私の必要を満たすことができません。 –
おそらく、私が達成したいことに応じて、便利な回避策を提供することができます。
私は、Javaスクリプトファイルでかみそりの表現を評価する方法を見つけようとしました。 jQueryのクリックイベントハンドラをアタッチして、多くのページにある特定のクラスを送信したいと考えました。これは、jQueryドキュメント準備完了イベントハンドラで行う必要があります。このクリックイベントはajax呼び出しを実行します。
これらのURLは、アプリケーションがルートレベルより下にある場合に、絶対的なものではなく、相対的なものでなければなりません。
$(document).ready(function() {
Checkit('@Url.Content("~/checkit")');
});
javascriptのコードのほとんどはまだある:だから、私は機能Checkit内のコードをラップし、レイアウトビューに呼び出しを移動することでこの問題を解決しまし
$(document).ready(function() {
$('input[type="submit"].checkit)').click(function (e) {
$.ajax({
type: 'POST',
url: '@Url.Content("~/checkit")', //Razor expression here
dataType: 'json',
success: function (data) {
if (!data) {
e.preventDefault();
handleResponse(data);
}
},
data: null,
async: false
});
});
});
のようなものを使用していましたjavascriptファイル。
JavascriptをサポートするRazorのサンプルWebページ(MVCビューではありませんが、同様です)です。もちろん、Javascriptファイルを動的に記述するのは非典型ですが、ここでもサンプルがあります。私は、JSONデータなどのデータを提供したい場合や、まれにしか計算や変更が必要なものを提供したかったので、これを使用しました。そのため、ブラウザーにはJSファイルを含めることができます。ここでのトリックは、Response.ContentType
を設定して、あなたのJavascriptにRazor <text>
タグのようなものを使用することです。
@{
Response.ContentType = "text/javascript";
Response.Cache.SetLastModified(System.Diagnostics.Process.GetCurrentProcess().StartTime);
Response.Cache.SetExpires(System.DateTime.Now.Date.AddHours(28));
Response.Cache.SetCacheability(System.Web.HttpCacheability.Public);
<text>
var someJavaScriptData = @someSortOfObjectConvertedToJSON;
function something(whatever){
}
</text>
}
次に、あなたの他のカミソリのファイルになるようにそれを含めることができます唯一のJSが含まれてい.cshtmlなど約
<script src="MyRazorJavascriptFile.cshtml"></script>
そして、何?
.csthml親JS
<script type="text/javascript">
alert('@Datetime.ToString()');
</script>
が含まれてい
_scripts.cshtml ...動的にJavaScriptを生成する人々は恐ろしく苦しみます。 JAVASCRIPTファイルは静的なので、Razorコードはjavascriptファイルに埋め込まれません。 – Raynos
あなたが解決しようとしている問題の解決策について助けを求めるほうがはるかに良いでしょう。それでは、問題の詳細を説明してから、試行した解決策を開始してください。あなたが現在それを解決しようとしている方法は、まあ、良いことではありません。 – Paul
私はもっと一般的な解決策を見つけようとします。そうでなければ、ここで何度もさまざまな状況に尋ねる必要があります。 –