【发布时间】:2016-12-01 20:59:15
【问题描述】:
我已经构建了许多自定义服务器控件并定期调用嵌入到我的控件中的 javascript 函数。但是我还没有弄清楚如何创建一个属性,控件的用户可以添加他们自己的函数,并且他们在包含该控件的页面中的 javascript 函数将被调用。我需要为asp:Button 控件执行OnClientClick 之类的操作。
编辑 1:
感谢@h2015 的回答,我在这方面取得了进展。
在我的控件中,我为用户的脚本创建了一个公共属性,
public string EditAddressScript
{
set
{
string scriptName = "EditAddressScript";
Type csType = this.GetType();
ClientScriptManager csm = Page.ClientScript;
string scriptText = string.Format("function EditAddress() {{{0}}}", value);
csm.RegisterClientScriptBlock(csType, scriptName, scriptText, true);
}
}
然后在我的控件的RenderContents 部分中,我检查是否为EditAddressScript 指定了一个值,如果有,则创建一个按钮。
output.Write("<input id='btnEdit' type='button' value='Edit Address' style='font-size: 6pt;' onclick='EditAddress();' />");
使用这个控件的页面动态创建它,所以我做这样的事情,
ECFControls.DefendantAddressReview defendantAddress = new ECFControls.DefendantAddressReview();
divControls.Controls.Add(defendantAddress);
defendantAddress.ClientEditAddressScript = "alert('Hello, World');";
这可行,但远非最佳。
- 我想在 aspx 页面中定义脚本,然后只为我的控件提供脚本的名称,而不是将
EditAddressScript的值设置为实际的 javascript 代码。 - 在控件的
RenderContents部分中,我有硬编码的脚本名称,我希望它是动态的。
编辑 2:
好的,看起来我让这变得比必要的复杂得多。所需要的只是在父 aspx 页面中创建一个脚本并将控件中的事件设置为该脚本。
这就是我现在所拥有的
将脚本添加到 aspx 页面。
function EditAddress() {
alert("Hello, World");
}
在控件中创建一个属性来保存值(_EditAddressScript是控件中的私有字符串变量)
public string EditAddressScript
{
set
{
_EditAddressScript = value;
}
}
然后在控件的RenderContents 部分检查是否为EditAddressScript 指定了一个值,如果有则创建一个按钮。
if(_EditAddressScript.Trim() != "")
output.Write(string.Format("<input id='btnEdit' type='button' value='Edit' style='font-size: 6pt;' onclick='{0}' />", _EditAddressScript));
像这样创建控件,
ECFControls.DefendantAddressReview defendantAddress = new ECFControls.DefendantAddressReview();
divControls.Controls.Add(defendantAddress);
defendantAddress.EditAddressScript = "EditAddress()";
如果控件是声明式创建的,我可以这样做,
<ECF:DefendantAddressReview ID="defendantAddressReview" runat="server" EditAddressScript="EditAddress()" />
有更好的方法吗?
谢谢。
【问题讨论】:
标签: javascript c# asp.net custom-server-controls