gpt4 book ai didi

c# - MVC 4 - 如何将模板传递给 html 辅助方法

转载 作者:行者123 更新时间:2023-11-30 12:32:43 25 4
gpt4 key购买 nike

我需要将所有脚本放在页面底部,问题是当我有一个局部 View 时我不能使用“RenderSection”方法。找到了一个很好的例子,说明如何添加一个 HtmlHelper 扩展,它采用脚本文件的名称,加载到堆栈中,然后另一个助手将其呈现在基本布局上: Razor section inclusions from partial view

这很好 - 但我不想为一小块脚本创建整个 JS 文件,甚至可能是我想插入的 HTML。而且我不想将其全部传递为一个字符串,我想要漂亮的格式和智能感知,所以我想使用一个模板,即:

@{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;
}

我需要如何调整委托(delegate)参数以获取模板内的值?

最佳答案

助手架构的设计使其可以适应您提供模板的场景,例如,对列表中的每个项目进行操作。在这种情况下,您当然希望能够在遍历列表时将“当前”项传递给它。

但是,在其他情况下(例如您的情况),没有当前项目。然而,正如您所发现的那样,您仍然必须将委托(delegate)声明为您的方法的参数,该方法定义了一个使用一个参数的方法。没关系——因为你没有在你的助手中使用那个参数(你没有在你的模板中使用有点神奇的 item 参数)你可以传递它 null在您的实现中。最好将您的参数声明为 Func<object, IHtmlString>而不是 Func<object, object> , 但无论如何,只需调用 code(null).ToString()获取您需要呈现的 HTML 编码字符串。

关于c# - MVC 4 - 如何将模板传递给 html 辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10957755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com