我正在创建一个DotNetNuke 4.x模块,并且在我的模块中需要一个AJAX CascadingDropDown。我把它定义如下......
<asp:UpdatePanel runat="server" ID="CascadingDropDowns">
<ContentTemplate>
<asp:DropDownList runat="server" ID="SelectGroupDropDownList">
</asp:DropDownList>
<ajax:CascadingDropDown runat="server" ID="SelectGroupDropDownListExtender" Category="Group"
TargetControlID="SelectGroupDropDownList" PromptText="Select a Group" ServiceMethod="GetGroups">
</ajax:CascadingDropDown>
<!-- more dropdowns & cascadingdropdown extenders here -->
在ascx的代码隐藏中定义的页面方法就像这样...
[WebService]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService()]
public partial class EligibilityView : PortalModuleBase
{
[WebMethod]
[ScriptMethod]
public CascadingDropDownNameValue[] GetGroups(string knownCategoryValues, string category)
{
var results = new List<CascadingDropDownNameValue>();
// code here to fill the list with values...
return results.ToArray();
}
当我运行页面时,我得到一个“[方法错误500]” - 并且无法弄清楚我做错了什么。我认为问题是页面无法找到webmethod,因为它在ASCX控件中定义,而不是页面本身。我确实需要以这种方式定义 - 而不是创建ASMX服务 - 因为这将被编译成DotNetNuke的模块,我想在模块内部保持简单。
任何建议都将不胜感激。
答案 0 :(得分:4)
我不认为在ASCX中访问该Web服务方法会有一种简单的方法。在这种情况下,“简单”可能意味着向模块添加ASMX。
您是否有理由认为添加ASMX会有问题?
将另一个文件添加到模块包中应该使用与添加控件本身相同的过程。在清单中,您只需要在files部分中指定它,然后确保它最终在包中。您还可以在包中使用资源zip文件,并指定该zip文件,确保您的.ascx和.asmx文件(以及任何其他内容文件)都在那里。