2010-07-09 3 views
0

Мне нужно вызвать код сервера ASP.Net с клиента. Поскольку я нахожусь в пользовательском элементе ascx, я не могу использовать [webmethod] + PageMethods, так как это работает только на страницах ASPX.ASP.Net Client-callback не работает с элементом управления ASCX

Следующий вариант, который, как я думал, будет работать, - это создание клиента-обратного вызова вручную. Используя этот метод, клиент успешно вызовет код сервера, но клиент не получит обратный вызов. Это мой код для создания блоков сценариев на стороне клиента:

protected void Page_Load(object sender, EventArgs e) 
{ 

    String strJSCallbackPrefix = this.ClientID; 

    ClientScriptManager cm = Page.ClientScript; 

    String cbReference = cm.GetCallbackEventReference(this, "arg", strJSCallbackPrefix + "ReceiveServerData", "context"); 

    String callbackScript = "function " + strJSCallbackPrefix + "CallServer(arg, context){" + cbReference + "; }"; 

    cm.RegisterClientScriptBlock(this.GetType(), strJSCallbackPrefix + "CallServer", callbackScript, true); 

    String strReceiveServerData = "function " + strJSCallbackPrefix + "ReceiveServerData(arg, context){document.getElementById('btnCancel').value='thisandthat';}"; 

    cm.RegisterClientScriptBlock(this.GetType(), strJSCallbackPrefix + "ReceiveServerData", strReceiveServerData, true); 

    Button2.OnClientClick = strJSCallbackPrefix + "CallServer('test message',1); " + "return false;"; 
} 

public string GetCallbackResult() 
{ 
    return returnValue; 
} 

public void RaiseCallbackEvent(string eventArgument) 
{ 
    returnValue = "11223" + eventArgument; 
} 

Кто-нибудь есть какие-либо идеи, почему вызов клиента обратно не уволят?

ответ

0

Вы можете просто добавить страницу PageMethod в содержащую страницу aspx. Неважно, где это происходит, поскольку вы не можете взаимодействовать с содержимым страницы/usercontrol с PageMethod в любом случае.

Остерегайтесь, это может стать кошмаром для обслуживания, если пользовательский контроль используется на большом количестве страниц.

+0

Как уже упоминалось выше, у меня ограниченный доступ к странице aspx, поскольку она находится в среде, управляемой контентом. Вот почему я стараюсь, чтобы все было аккуратно заправлено в usercontrol. – Max