我创建了一个用户控件,我计划在每次用户编辑某些内容时使用该控件,并在我调用用户控件的常规ASPX页面中使用。用户cotrol包含一些文本框和一个AutoCompleteExtender。除了Extender之外,一切正常。我已经在许多其他APSX页面中使用它并且像魅力一样工作,但由于某种原因它似乎在这里不起作用。通过chrome调试后,我发现我无法访问该方法(405)。经过几天的清理,互联网,我发现了这个:
“可调用页面方法是公共静态(或在VisualBasic®中共享) .NET)方法在codebehind类中定义并用 与Web服务方法相同的WebMethod属性。现在, 这仅限于ASPX页面 - 内联代码和代码隐藏代码 - 但是 可能会在将来扩展到用户控件和自定义控件。“
此外,偶然发现其他论坛建议使用Web服务而不是Web方法。试过这个但仍然有同样的错误(405)。我已经被困了将近一个星期,而且我已经没有选择了。这是一个不好的做法,这就是为什么你不能这样做?我想要的就是将它全部保存在同一个用户控件和aspx上。
这就是我在用户控件上使用扩展程序的方式:
<aspx:AutoCompleteExtender ID="tbEntitiesAutoCompleteEx" runat="server"
BehaviorID="tbEntitiesAutoCompleteEx" TargetControlID="tbEntity"
UseContextKey="True" ServiceMethod="GetAutocompleteEntities"
MinimumPrefixLength="3" CompletionSetCount="10" CompletionInterval="300"
CompletionListCssClass="autoCompleteList"
CompletionListItemCssClass="autoCompleteItem"
CompletionListHighlightedItemCssClass="autoCompleteHighlightedItem"
CompletionListElementID="divCodeAutoCompletePlacement"
OnClientPopulating="OnEntitiesPopulating"
OnClientPopulated="OnEntitiesPopulated"
OnClientItemSelected="OnEntitySelected"
ShowOnlyCurrentWordInCompletionListItem="true"
FirstRowSelected="true" ServicePath ="~/InterventionsWebService.asmx" />
我已将服务路径更改为~/InterventionsWebService.asmx
(同一目录中的Web服务),CreateEdit.aspx
(第I页称为用户控件)和CreateEdit.ascx
(用户控制它自己)和没人工作。
这是网络方法:
[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public List<string> GetAutocompleteEntities(string prefixText, int count, string contextKey)
{
var bbq = 0
return new List<string>();
}
我也试过把它变成一个静态的方法,但仍然无法正常工作。
我在var bbq = 0
上有一个断点但由于(405)错误它从未命中。
任何解释都会很好,谢谢。
答案 0 :(得分:0)
我设法解决了我的问题。我删除了服务路径,将web方法放在调用ascx的aspx中,使web方法保持静态并设法达到断点。
答案 1 :(得分:0)
我将WebMethod放在网页上,并用它来调用UserControl上的方法。