ページの下部にすべてのスクリプトを配置する必要があります。問題は、部分ビューがある場合、「RenderSection」アプローチを使用できないことです。スクリプト ファイルの名前を取得してスタックにロードし、別のヘルパーがそれをベース レイアウトにレンダリングする HtmlHelper 拡張機能を追加する方法の良い例を見つけました: Razor section includes from partial view
それは素晴らしいことですが、ドロップインしたいスクリプトの小さなチャンク、または HTML でさえ、JS ファイル全体を作成する必要はありません。また、すべてを文字列として渡したくありません。素敵な書式設定とインテリセンスが必要なので、テンプレートを使用したいと思います。
@{Html.AddScript("test", @<text>
<script type="text/javascript">
function RefreshPreview() {
$('#AutoReplyHtml_Preview').html(
$('#htmlTemplate').html()
.replace('@@MESSAGE_TITLE@@', $('#AutoReplySubject').val())
.replace('@@PRE_HEADER@@', $('#AutoReplyPreHeader').val())
.replace('@@MESSAGE_BODY@@', $('#AutoReplyHtml').val())
);
$('#AutoReplyPlainText_Preview').html(
$('#plainTextTemplate').html()
.replace('@@MESSAGE_BODY@@', $('#AutoReplyPlainText').val())
);
}
$(document).ready(function() {
RefreshPreview();
});
</script>
</text>);}
問題は-テンプレートの値をメソッドに取得する方法です。準拠するこのコードがありますが、「コード」パラメーターからデータを取得する方法の手がかりがありません:
public static string AddScript(this HtmlHelper htmlHelper, string title, Func<object, object> code) {
var ctx = htmlHelper.ViewContext.HttpContext;
Dictionary<string, string> scripts = ctx.Items["HtmlHelper.AddScript"] as Dictionary<string, string>;
if (scripts == null) {
scripts = new Dictionary<string, string>();
ctx.Items.Add("HtmlHelper.AddScript", scripts);
}
scripts.Add(title, code.ToString()); //Doens't work!
return string.Empty;
}
テンプレート内の値を取得するには、どのようにデリゲート パラメータを微調整する必要がありますか??