Asp.net mvc 包括来自HtmlHelper扩展方法的脚本引用

Asp.net mvc 包括来自HtmlHelper扩展方法的脚本引用,asp.net-mvc,Asp.net Mvc,以下是日历的扩展方法示例: public static string Calendar(this HtmlHelper html) { return "<input type='text' onclick='showCalendar(this)'/>"; } 公共静态字符串日历(此HtmlHelper html) { 返回“”; } 函数showCalendar()在calendar.js中定义 是否可以从扩展方法注册对calendar.js的引用 可以多次调用Html.

以下是日历的扩展方法示例:

public static string Calendar(this HtmlHelper html)
{
    return "<input type='text' onclick='showCalendar(this)'/>";
}
公共静态字符串日历(此HtmlHelper html)
{
返回“”;
}
函数showCalendar()在calendar.js中定义

是否可以从扩展方法注册对calendar.js的引用


可以多次调用Html.Calendar(),但只应包含一个脚本。

问得好。。目前,我只是创建另一个扩展方法,从中返回脚本注册(比如RegisterCalendarScriptBloc()),但最好在第一次需要依赖项时自动包含它。

如果您使用的是WebForms视图(未测试)),请尝试类似的方法:

使用System.Web.UI.HtmlControls;
公共静态字符串日历(此HtmlHelper html,HtmlHead)
{
var urlHelper=新的urlHelper(html.ViewContext.RequestContext);
var url=urlHelper.Content(“~/Script/calendar.js”);
//var scriptControl=新的HtmlGenericControl(“脚本”);
//scriptControl.Attributes.Add(“src”,url);
//添加(“type”,“text/javascript”);
//if(head.Controls.Contains(scriptControl))
//{
//head.Controls.Add(scriptControl);
//}
//或
如果(!head.Controls.Cast().Any(x=>(x作为HtmlGenericControl)!=null
&&(x为HtmlGenericControl).Attributes[“src”]==url))
{
var scriptControl=新的HtmlGenericControl(“脚本”);
scriptControl.Attributes.Add(“src”,url);
添加(“type”,“text/javascript”);
head.Controls.Add(scriptControl);
}
返回“”;
}
鉴于:

<%= Html.Calendar(Header) %>

希望这能起作用。
:)

简短回答:是的

来了,但是

但是您需要更改您的退货类型。如果您只是返回一个字符串,它将被编码,这样您的浏览器就不会实际运行脚本块

在Chrome中,你会看到类似这样的东西“”注意引号。要解决这个问题,请使用IHtmlString作为返回类型,并确保双重确认return helper.Raw

public static IHtmlString RegisterScripts(this HtmlHelper helper)
    {
        return helper.Raw("<script>function () { DO SOMETHING }</script>");
    }
公共静态IHtmlString注册表脚本(此HtmlHelper帮助程序)
{
返回helper.Raw(“函数(){dosomething}”);
}
public static IHtmlString RegisterScripts(this HtmlHelper helper)
    {
        return helper.Raw("<script>function () { DO SOMETHING }</script>");
    }