Ajax Modal Popup Extender和JQM

时间:2012-10-01 09:49:44

标签: asp.net jquery-mobile

在我的aspx移动页面中,当我向服务器发送ajax请求时出现此错误:

Sys.ArgumentTypeException: Object of type 'AjaxControlToolkit.ModalPopupBehavior' cannot  be converted to type 'AjaxControlToolkit.ModalPopupBehavior'. Parameter name: instance

我不确切知道发生了什么,但我确定它与我的页面中的jquery相关,因为我检查此页面时没有包含jqm并且它正常工作。感谢

在asp页面中单击按钮时运行的行:

string message = "blahbalahblahblah...";
MessageBoxInfo.Show(MessageBox.MessageType.Error, message, 110, 350);
return;

在我的Control(MessageBox.ascx)中,我有:

<asp:LinkButton ID="LinkButtonTargetControl" runat="server"></asp:LinkButton>
<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtenderMessage" runat="server" TargetControlID="LinkButtonTargetControl" 
    PopupControlID="MessageBox" OkControlID="ButtonOK" CancelControlID="CloseButton" BackgroundCssClass="messagemodalbackground" />

    <asp:Panel ID="MessageBox" runat="server" style="display:none;">
         <asp:HyperLink runat="server" id="CloseButton" >
            <asp:Image ID="Image1" runat="server"  ImageUrl="../images/Message/close.png" AlternateText="Close" />
        </asp:HyperLink>
        <p><asp:Literal ID="litMessage" runat="server"></asp:Literal></p>
    </asp:Panel>      

show方法如下(MessageBox.ascx.cs):

public void Show(MessageType messageType, string message, int height, int width)
{
    CloseButton.Visible =  ShowCloseButton;
    litMessage.Text = message;
    MessageBox.Height = height;
    MessageBox.Width = width;
    MessageBox.CssClass = messageType.ToString().ToLower();
    ModalPopupExtenderMessage.Show();
    this.Visible = true;
}

另外我应该提一下每次调用show方法以及其中的所有内容,例如width height ...设置正常,但是如果你在firebug中检查它,你会看到显示:还没有剩下!

1 个答案:

答案 0 :(得分:0)

由于某种原因,运行时应该使用两个名为AjaxControlToolkit.ModalPopupBehavior的不同程序集,假设AjaxControlToolkit.ModalPopupBehavior1AjaxControlToolkit.ModalPopupBehavior2

MessageBoxInfo来自AjaxControlToolkit.ModalPopupBehavior1
MessageBox.MessageType来自AjaxControlToolkit.ModalPopupBehavior2

因此MessageBoxInfo.Show(MessageBox.MessageType.Error, message, 110, 350);会引发错误的转换错误。

如果您尝试其他Show()覆盖,没有MessageBox.MessageType,那么它是否正常?

真正的解决方案,如果你找不到reasom可能是使用反射的变通方法: 从运行时MessageBoxInfo对象获取assemlby 并使用它来实例化MessageBox.MessageType