[英]MVC 4 - How to pass a template to an html helper method
我需要在頁面底部放置所有腳本,問題是當我擁有部分視圖時,我無法使用“ RenderSection”方法。 找到了一個很好的示例,說明如何添加一個HtmlHelper擴展名,該擴展名帶有腳本文件的名稱,並加載到堆棧中,然后另一個助手將其呈現在基本布局上: Razor部分包含部分視圖
太好了-但是我不想為要插入的一小段腳本甚至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>);}
問題是-如何將模板的值添加到我的方法中,我有符合要求的代碼,但是不知道如何從“ code”參數中獲取數據:
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;
}
我該如何調整委托參數以獲取模板內部的值?
設計了幫助程序體系結構,以便它可以適應您提供將在例如列表中的每個項目上運行的模板的場景。 在這種情況下,您當然希望能夠在遍歷列表時將其傳遞給“當前”項目。
但是,在其他情況下(例如您的情況), 沒有當前項目 。 然而,正如您所發現的,您仍然必須將委托聲明為方法的參數,該方法定義了使用一個參數的方法。 沒關系-因為您沒有在助手中使用該參數(您沒有在模板中使用有些不可思議的item
參數),所以可以在實現中將其傳遞為null
。 最好將參數聲明為Func<object, IHtmlString>
而不是Func<object, object>
,但是無論如何,只需調用code(null).ToString()
即可獲取需要呈現的HTML編碼字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.