HI,我正在加载一个UserControl(里面有GridPanel) 的TabPanel。
但是当我点击Gridpanel编辑命令按钮时,服务器上的事件 方法不起作用,并显示像
这样的例外异常详细信息:System.Web.HttpException:具有ID的控件 'id8b177c82adb2e925'找不到。
我的代码在这里
对于userControl:.ascx代码是
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="GridPanelUserControl.ascx.cs" Inherits="Ext_PracticeExamples.GridPanelUserControl" %>
<ext:GridPanel ID="gpEmployeeList" runat="server" StripeRows="true" Title="Employee List" Layout="FitLayout"
Width="620" Height="400" AutoExpandColumn="FirstName">
<Store>
.....
</Store>
<ColumnModel ID="ColumnModel1" runat="server">
<Columns>
<ext:ImageCommandColumn ID="imgSettings" runat="server" Text="Settings" Resizable="false">
<Commands>
<ext:ImageCommand Icon="BasketEdit" Style="text-align: center" CommandName="Settings">
</ext:ImageCommand>
</Commands>
<Listeners>
<Command Handler=" #{DirectMethods}.fnDisplaySettings(record.data.Company,record.data.Price,record.data.Change);" />
</Listeners>
</ext:ImageCommandColumn>
</Columns>
</ColumnModel>
和相应的.cs类文件方法,它没有触发。
[DirectMethod]
public void fnDisplaySettings(string name, double X, double Y)
{
// ..some Operation....
Response.Redirect("~/_Default.aspx");
}
在webBrowser中观察源页面时,我发现控件有 不同的Id,以便相应的功能不显示。如果我给 “ClientIdMode = static”它在我加载时给了我唯一ID问题 页面中的相同控件。如果我在单页中使用此代码 没有UserControl它工作正常。
我应该怎么做调用服务器端方法。
谢谢
答案 0 :(得分:2)
我猜你在一次请求期间动态呈现用户控件,并且在另一个请求期间不会重新创建它,因此Ext.NET找不到它的DirectMethod,因为服务器上没有用户控件实例。
可能的解决方案是:
在每个请求期间重新创建用户控件。这是a related discussion on the Ext.NET forums。
在WebService(asmx)或HTTP处理程序(ashx)中设置DirectMethod的处理程序,并通过URL调用它。这样的调用不需要用户控件实例。这是一些例子。
http://examples.ext.net/#/Events/DirectMethods/WebService/
http://examples.ext.net/#/Events/DirectEvents/WebService/
此方法的缺点是您无法在WebService或HTTP处理程序中访问用户控件的控件。所有必需的东西都应该从页面提交作为请求的额外参数。