我有一个ModalPopupExtender(mpe),它会在点击asp:按钮时显示。该按钮调用一个javascript函数,然后调用webmethod。 webmethod位于页面后面的代码中。
webmethod将字符串变量传递给后面代码中的另一个方法。它决定了mpe的作用。这个逻辑背后的想法是,当你点击按钮我想启用mpe的某些部分并禁用其他部分。这是因为mpe有几个功能。
Aspx Button和UserControl
<uc2:IMG ID="IMG1" runat="server" />
<asp:Button ID="btnAddNewImg" runat="server" Text="Add New Image" onclientclick="ShowImgPopupScreen()" />
Javascript功能
<script type="text/javascript">
function ShowImgPopupScreen() {
// call server side method
PageMethods.AddNewImg();
}
</script>
ASPX.CS代码
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static void AddNewImg()
{
string option = "add";
image_loader_cms cms = new image_loader_cms();
cms.SetButtons(option);
}
protected void SetButtons(string add)
{
if (add == "add")
{
IMG1.Add = true;
}
else
{
IMG1.Edit = true;
}
}
ASCX.CS
public bool Add
{
get
{
return btnAdd.Enabled;
}
set
{
btnAdd.Enabled = value;
}
}
public bool Edit
{
get
{
return btnUpdate.Enabled;
}
set
{
btnUpdate.Enabled = value;
}
}
使用断点时代码会步入IMG1.Add = true;
但在该行代码之后我会收到此错误消息。
Microsoft JScript运行时错误:Sys.Net.WebServiceFailedException: The server method 'AddNewImg'
失败,并显示以下错误:
System.NullReferenceException-- Object reference not set to an instance of an object.
这个问题让我摸不着头脑。
答案 0 :(得分:1)
您正在创建一个新的用户控件,但它不会创建其子控件,或者在将其添加到控件树之前无论如何都可用,因此您的图像和按钮永远不会被创建。
由于您使用静态页面方法,我认为这不会起作用。
你真正试图用moethod页面中的用户控件做什么?