Если вы гуглите по словам SharePoint, WebMethod, undefined, то вам сюда.
Во-первых, веб-методы работают только на страницах, с WebParts у вас такой номер не пройдет.
Во-вторых, нужно настроить скрипт-менеджер. Так как на страницах SharePoint скрипт-менеджер уже есть, по крайней мере в SharePoint 2010, настраивать его нужно программо. В коде ниже это делает функция EnsureScriptManager.
В-третьих, PageMethods в SharePoint почему-то синхронно не работает, по этому респонз нужно забирать из калбек функции асинхронно.
Итак. В код добавляем:
/// <summary>
/// Настраивает скрипт менеджедр что б работали веб-методы
/// </summary>
private void EnsureScriptManager()
{
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); if (scriptManager == null)
{
scriptManager = new ScriptManager(); scriptManager.EnablePageMethods = true; if (Page.Form != null)
{
Page.Form.Controls.AddAt(0, scriptManager);
}
}
scriptManager.EnablePageMethods = true; scriptManager.EnablePartialRendering = true;
}
/// <summary>
/// Тут инициализируем скрипт-менеджер
/// </summary>
protected override void OnInit(EventArgs e)
{
EnsureScriptManager();
base.OnInit(e);
}
/// <summary>
/// Это тут совсем не нужно )
/// </summary>
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// Наш веб-метод
/// </summary>
[WebMethod] public static string GetData(int id)
{
return "im a data";
}
На aspx добавляем:
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<script type="text/javascript">
function test() {
// Так не работает
var temp = PageMethods.GetData(13);
alert(temp);
// Так работает
PageMethods.GetData(13, function (response) {
alert(response);
});
}
test();
</script>
</asp:Content>