我是编写自定义控件的新手。我有MyCustomControl.cs,在我的Render方法中,我想渲染大约50行JavaScript。最好的方法是什么,使用作家?
protected override void Render(HtmlTextWriter writer)
{
writer.write(@"<script type....rest of opening tag here");
writer.Write(@"
function decode(s)
{
return s.replace(/&/g, ""&"")
.replace(/"/g, '""')
.replace(/'/g, ""'"")
.replace(/</g, ""<"")
.replace(/>/g, "">"");
};"
);
我计划再增加6个writer.Write在这里写出更多部分。这是在这个庄园中实际执行JavaScript编写的最佳方法吗?
还是应该使用ClientScript.RegisterClientScriptBlock?那么人们从自定义控件编写javascript的最佳实践或常用方法是什么? (我这里不是在谈论用户控件!!,自定义控件/ Class!)
在查看来源时,我还希望在客户端上吐出/呈现时保留任何缩进以便于阅读。
答案 0 :(得分:0)
我提供的答案只是考虑定期回发。可以使用ScriptManager及其各自的方法应用以下所有方法来执行相同的操作。
有几种方法可以做到这一点。您可以加载Web资源并引用它
// The Scripts namespace in this case would actually be a physical folder in your YourNamespace.CustomControlsNamespace
// namespace.
// Also the /Scripts/YourJavaScriptFile.js needs to have it's Build Action property set to Embedded Resource
[assembly: WebResource("YourNamespace.CustomControlsNamespace.Scripts.YourJavaScriptFile.js", "text/javascript")]
namespace YourNamespace.CustomControlsNamespace
{
public CustomControl()
{
...
}
...
protected override OnPreRender(EventArgs e)
{
...
Type type = typeof(CustomControl);
string scriptUrl = Page.ClientScript.GetWebResourceUrl(type, "Acuity.Web.UI.WebControls.Scripts.accdaterange.js");
string key = "yourKey";
if (!Page.ClientScript.IsClientScriptIncludeRegistered(type, key))
{
control.Page.ClientScript.RegisterClientScriptInclude(type, key, scriptUrl);
}
...
}
...
}
您还可以在自定义控件中引用外部脚本。
namespace YourNamespace.CustomControlsNamespace
{
public CustomControl()
{
...
}
...
protected override OnPreRender(EventArgs e)
{
...
Type type = typeof(CustomControl);
string scriptUrl = Page.ResolveClientUrl("~/yourScriptsFolder/yourExternalScript.js");
string key = "yourKey";
if (!Page.ClientScript.IsClientScriptIncludeRegistered(type, key))
{
control.Page.ClientScript.RegisterClientScriptInclude(type, key, scriptUrl);
}
...
}
...
}
取决于您希望如何打包它。嵌入式资源的优势在于,您可以确保此脚本始终使用自定义控件所在的程序集。您很可能必须添加一些内联JavaScript来连接自定义控件。尝试尽可能少地做这件事。您可以使用Page.ClientScript.RegisterClientScriptBlock(...)
执行此操作。您还希望避免硬编码脚本中自动生成的客户端ID。它们应作为参数传递给客户端对象。
此外,一旦看起来很好,您应该压缩/缩小外部JavaScript文件。我使用Yahoo!的YuiCompressor!但是还有其他几个。
你还应该投入一些时间来研究使用JavaScript框架(如jQuery)来完成大量繁琐的工作。这就是现在。我可能稍后再添加一些,但这些是我现在的智慧之词。