gpt4 book ai didi

jquery - 制作一个用户控件的 DLL 以及嵌入的 Jquery

转载 作者:行者123 更新时间:2023-12-01 05:01:39 24 4
gpt4 key购买 nike

我找到了一些相关资源,几年前我在这个主题上有过类似但独特的经历。

现在我正在寻找这样做:在用户控件复合控件中嵌入Jquery插件,例如:一些标签或转发器,...并生成 DLL 输出

控件应该强制检查脚本优先级首先是Jquery,然后是插件

终于可以将其作为一个可重用的DLL

提前致谢

编辑:路径、最佳实践、信息或最棘手部分的简单示例值得赞赏请看我下面的评论

最佳答案

这有一些技术上棘手的部分,我尝试在这里介绍它们。我曾经在谷歌上花了一些时间,直到我终于得到了所有的碎片。我当然无法帮助你解决所有这些问题。其中一些非常贴近实际场景。事实上,我从未找到任何适合我的场景的信息,这并没有让我找到意大利面条代码、巨大的代码库等等。

只需在新类中重写 System.Web.UI.Webcontrols.Webcontrol 即可创建复合控件。由于您对它的兴趣,我使用CombinedScript 作为名称。名称当然可以是任何名称。

public class CombinedScript : System.Web.UI.WebControls.WebControl
{

}

虽然覆盖它,但您可以使用一些方法。有几种方法,然后是下面的方法,但你必须谷歌搜索最适合你需要的方法。

protected override void OnPreRender(EventArgs e)
{
}

protected override void Render(HtmlTextWriter writer)
{
}

重点是这些方法在向客户端生成控件内容之前、同时和之后执行操作。 OnPreRender 发生在之前,即

protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);

ClientScriptManager cs = this.Page.ClientScript;
cs.RegisterClientScriptResource(typeof(WebControls.CombinedScript), "Project.Script.Common.js");
cs.RegisterClientScriptResource(typeof(WebControls.CombinedScript), "Project.Script.JQuery.js");
cs.RegisterClientScriptResource(typeof(WebControls.CombinedScript), "Project.Script.JCharts.js");
}

这里棘手的事情是脚本的路径。 “Project”是 DLL 程序集基本名称。 “Script”是区分大小写的路径,脚本文件所在的位置(从项目基本路径开始计算)。最后一部分是区分大小写的文件名。我不确定,但我认为如果你将所有内容都保留在根目录下,路径技巧是毫无疑问的。

WebControls.CombinedScript 正如您所看到的,是控件的名称。要在 ASP.NET 页面中使用,必须在 web.config 中注册。

<pages>
<controls>
<add assembly="Project" tagPrefix="myname" namespace="Project.WebControls" />
</controls>
</pages>

那些RegisterClientScriptResource使得脚本被加载为GET /WebResource.axd?d=MTVCK_diZif7wEDQp9UGv-GlqPKP-WXGPNEqr-mq_RnUKWDgSydkLxIuSusdnolRQsR-wpNbTpfJzAVtsonjuwVUqzguotspQFImk6-auSF3N18eVOXbYh_-6NHovgR90&t当网站加载时。如果他们不这样做,那就有问题了。 IE。路径错误,忘记包含js作为嵌入资源等等。

完成上述所有操作后,您可以注册 DLL,添加命名空间/控制标记,然后将其放在页面上 <myname:CombinedScript runat="server" />

您可能可以执行类似的操作,将公共(public)属性添加到复合控件
public int ScriptType {get;set;} 。将属性放入控件 <myname:CombinedScript ScriptType="1" runat="server" /> 。并添加if (this.ScriptType == 1) { ..evaluate what script to load.. } 。当然,这种评估类型可以从客户端更改(任何人都可以将其生成的 html 替换为另一个 ScriptType ID)。

我想你可以通过这个更好地审视自己。您需要评估要加载的脚本的语句。上面的最后一个示例是一种方法,您当然可以在 RegisterClientScriptResources 之间/上放置任何类型的逻辑。

我谈到了 RenderControl 和 Render。
你可以像这样使用它,

protected override void Render(HtmlTextWriter writer)
{
HttpResponseSubstitutionCallback callback = new HttpResponseSubstitutionCallback(outputcache_callback);
Context.Response.WriteSubstitution(callback);
}

public static string outputcache_callback(HttpContext context)
{
string html = "";

html += "<script type='text/javascript'>";
html += " var lang='" + Project.Common.CurrentLang + " ';";
html += " var applicationPath='" + GetApplicationPath + "'; ";
html += "</script>";
return html;
}

public GetApplicationPath { get { ..logic.. }}

这是另一种将脚本放入客户端的技术。如果您要将用户或实例特定的变量加载到脚本中,那就太好了。 static用于替代样本。另外,如果你想影响控件本身内容的生成(比如你想制作一个更智能的 asp:Label,你可以这样做,

public override void RenderControl(HtmlTextWriter writer)
{
base.RenderControl(writer);
writer.Write("<div id='dvBox'>");
....
base.RenderChildren(writer);
writer.Write("</div>");
writer.Write(script);
}

我希望这些信息能够结合并帮助一些开发人员寻找这种构建控件的方法。

关于jquery - 制作一个用户控件的 DLL 以及嵌入的 Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558933/

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