在我的页面中,我有一个用户控件,当开关打开时会插入一个jQuery函数。这是用户控件背后的代码:
public bool isRequired {
set {
if (value == true) {
ClientScriptManager cs = Page.ClientScript;
string csname = "isRequiredScript";
if (!cs.IsClientScriptBlockRegistered(this.GetType(), csname)) {
StringBuilder cstext = new StringBuilder();
cstext.Append("<script type=\"text/javascript\">");
cstext.Append("$(document).ready(function () {");
cstext.Append("function QuestionwithConditionalInfo_validation() {");
cstext.Append("if ($(\"#MainPlaceHolder_" + QuestionOption.ClientID + " :checked\").val() == null) {");
cstext.Append("alert(\"Please answer the question '" + setQuestionText + "'\");");
cstext.Append("return false;");
cstext.Append("}} });");
cstext.Append("</script>");
cs.RegisterClientScriptBlock(this.GetType(), csname, cstext.ToString(), false);
}
}
}
}
然后在主页面中,我计划调用jQuery函数:
function childpage_validation() {
if (QuestionwithConditionalInfo_validation() == false)
return false;
}
<asp:Button ID="page1_Next" Text="Next page" runat="server" OnClick="page1_Next_Command" OnClientClick="return childpage_validation()" />
然后我收到错误,说明函数QuestionwithConditionalInfo_validation()
未定义,之后我尝试了RegisterStartupScript
而不是RegisterClientScriptBlock
,它们得到了相同的错误。有谁知道为什么?
答案 0 :(得分:1)
了解文档就绪只需要允许它在该事件期间执行 - 它实际上是一个事件处理程序。由于您不需要(事件已经发生),您可以从代码中删除它:
cstext.Append("<script type=\"text/javascript\">");
cstext.Append("function QuestionwithConditionalInfo_validation() {");
cstext.Append("if ($(\"#MainPlaceHolder_" + QuestionOption.ClientID + " :checked\").val() == null) {");
cstext.Append("alert(\"Please answer the question '" + setQuestionText + "'\");");
cstext.Append("return false;");
cstext.Append("}};");
cstext.Append("</script>");
同样通过删除它,你删除它的闭包现在它是一个全局对象,可以在你表达你想做的时候从页面访问。