M
MarkShoe
Is it possible to use Webmethods in user controls (ascx)?
Subject: Re: Web methods in user controls?
Date: Fri, 14 Dec 2007 09:48:50 -0500
Hi Steven, thanks for your reply. Perhaps my question was too general.
Allow me to be a bit more specific.
I have a simple web user control with a button and a div on it. On the
containing page, I have a ScriptManager with EnablePageMethods=true.
When the user clicks the button, I would like it to log the time into the
'timelog' div. What actually happens though, is that when I click the
button, I get a javascript error claiming that PageMethods is not defined.
My question is whether using a webmethod within a user control is supported,
and if not, if there is another way to do this?
Here's the .ascx:
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="MyUserControl.ascx.cs" Inherits="MyUserControl" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<script type="text/javascript">
function RetrieveTime(controlId){
PageMethods.GetTime(controlId,ReceiveTime);
}
function ReceiveTime(time){
document.getElementById('timeLog').innerHTML += '<br />' + time;
}
</script>
<asp:ScriptManagerProxy ID="ScriptManagerProxy1"
runat="server"></asp:ScriptManagerProxy>
<input id="Button1" type="button" value="button"
onclick="RetrieveTime(this.id);"/>
<div id="timeLog"></div>
========== And here's the code-behind ============
public partial class MyUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static String GetTime(String controlId)
{
return System.DateTime.Now.ToString();
}
}
Steven Cheng said:Hi Mark,
Thanks for your reply and the further clarity.
Now I've got your actual concern, that is try to make an codebehind method
in ascx usercontrol be called by AJAX client service call.
Based on my research, I'm afraid codebehind method in ascx control can not
be directly exposed as AJAX webservice methods(called via Page methods
collection). We have to modify the page's codebehind so as to support some
certain ajax function calls.
BTW, I've found a forum thread in which someone mentioned a workaround for
his particular scenario. You can have a look to see whether it fits your
case also:
http://forums.asp.net/p/1145083/1857883.aspx#1857883
Sincerely,
Steven Cheng
Microsoft MSDN Online Support Lead
This posting is provided "AS IS" with no warranties, and confers no
rights.
--------------------Subject: Re: Web methods in user controls?
Date: Fri, 14 Dec 2007 09:48:50 -0500
Hi Steven, thanks for your reply. Perhaps my question was too general.
Allow me to be a bit more specific.
I have a simple web user control with a button and a div on it. On the
containing page, I have a ScriptManager with EnablePageMethods=true.
When the user clicks the button, I would like it to log the time into the
'timelog' div. What actually happens though, is that when I click the
button, I get a javascript error claiming that PageMethods is not defined.
My question is whether using a webmethod within a user control is supported,
and if not, if there is another way to do this?
Here's the .ascx:
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="MyUserControl.ascx.cs" Inherits="MyUserControl" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<script type="text/javascript">
function RetrieveTime(controlId){
PageMethods.GetTime(controlId,ReceiveTime);
}
function ReceiveTime(time){
document.getElementById('timeLog').innerHTML += '<br />' + time;
}
</script>
<asp:ScriptManagerProxy ID="ScriptManagerProxy1"
runat="server"></asp:ScriptManagerProxy>
<input id="Button1" type="button" value="button"
onclick="RetrieveTime(this.id);"/>
<div id="timeLog"></div>
========== And here's the code-behind ============
public partial class MyUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static String GetTime(String controlId)
{
return System.DateTime.Now.ToString();
}
}
<[email protected]>
Subject: Re: Web methods in user controls?
Date: Wed, 19 Dec 2007 11:23:12 -0500
Thanks Steven, you have confirmed my suspicions and answered my question.
I will consider using one of these 3 alternatives:
1. A web service which can be accessed from the web user control
(Although I don't really want to expose these methods publically with a
web service)
2. Using client script callbacks
(Not as flexible as the WebMethod -> PageMethod approach; can only pass
one string parameter)
3. The workaround you suggested.
(Requires that the WebMethod be in the page rather than the control;
making the web user control less independent)
Thanks very much for your help.
Mark
Steven Cheng said:Hi Mark,
Thanks for your reply and the further clarity.
Now I've got your actual concern, that is try to make an codebehind method
in ascx usercontrol be called by AJAX client service call.
Based on my research, I'm afraid codebehind method in ascx control can not
be directly exposed as AJAX webservice methods(called via Page methods
collection). We have to modify the page's codebehind so as to support some
certain ajax function calls.
BTW, I've found a forum thread in which someone mentioned a workaround for
his particular scenario. You can have a look to see whether it fits your
case also:
http://forums.asp.net/p/1145083/1857883.aspx#1857883
Sincerely,
Steven Cheng
Microsoft MSDN Online Support Lead
This posting is provided "AS IS" with no warranties, and confers no
rights.
--------------------Subject: Re: Web methods in user controls?
Date: Fri, 14 Dec 2007 09:48:50 -0500
Hi Steven, thanks for your reply. Perhaps my question was too general.
Allow me to be a bit more specific.
I have a simple web user control with a button and a div on it. On the
containing page, I have a ScriptManager with EnablePageMethods=true.
When the user clicks the button, I would like it to log the time into the
'timelog' div. What actually happens though, is that when I click the
button, I get a javascript error claiming that PageMethods is not defined.
My question is whether using a webmethod within a user control is supported,
and if not, if there is another way to do this?
Here's the .ascx:
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="MyUserControl.ascx.cs" Inherits="MyUserControl" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<script type="text/javascript">
function RetrieveTime(controlId){
PageMethods.GetTime(controlId,ReceiveTime);
}
function ReceiveTime(time){
document.getElementById('timeLog').innerHTML += '<br />' + time;
}
</script>
<asp:ScriptManagerProxy ID="ScriptManagerProxy1"
runat="server"></asp:ScriptManagerProxy>
<input id="Button1" type="button" value="button"
onclick="RetrieveTime(this.id);"/>
<div id="timeLog"></div>
========== And here's the code-behind ============
public partial class MyUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static String GetTime(String controlId)
{
return System.DateTime.Now.ToString();
}
}
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.