Hi, Is it possible to call ASP.NET codebehind function from Javascript.
Thanks.
Hi, Is it possible to call ASP.NET codebehind function from Javascript.
Thanks.
No, it is not possible to call ASP.NET code behind function from Javascript directly. ASP.NET code behind executes on the server in the context of the ASP.NET worker process. Javascript is executed on the client in the context of the client's browser.
The only way Javascript could trigger execution of ASP.NET code behind is through making an AJAX call from the Javascript to the server.
You can make use of __doPostBack to make a postback from javascript. Just add a server control with AutoPostBack property and set it to true.
yes, you can make web method like..
<WebMethod(EnableSession:=True), ScriptMethod()> _
Public Shared Function updateContent() As String
Return "Your String"
End Function
and then call in javascript like..
PageMethods.updateTabContent(parameterValueIfAny, onSuccessMethod,onFailMethod);
this also need to add
<asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
I would prefer Muhammad Akhtar PageMethod approach. Just one short note: You don't need the scriptmanager. The scriptmanager only generates the javascript proxy methods for you. If you already have JQuery on your page, you can forget about the scriptmanager and write something like this on your page instead:
<script type ="text/javascript">
$(document).ready(function() {
$("#AjaxLink").click(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "YourPage.aspx/updateContent",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
$("#content").html(result.d);
}
});
});
});
</script>
this asumes that you have a link with the ID AjaxLink on your page as well as a div with the id content that shows the result. The benefit is that you save 30kb javascript compared between jquery and the injected scripts by the scriptmanager
If you are working on a non-Ajax project, you can try System.Web.UI.ICallbackEventHandler.
Samples here:
http://msdn.microsoft.com/en-us/library/ms178210.aspx
http://www.ajaxmatters.com/2006/05/using-icallbackeventhandler-in-asp-net/
Because you ask me how to call a code behind with out ajax, here is a way. You call the function and return 204 status code. Of course you can not access the page controls to set data, but you can get :)
public partial class Dokimes_StackOverFlow_CallCodeBehind : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
txtDebug.Text = DateTime.Now.ToString();
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
Debug.Write("LinkButton1_Click called");
Response.Status = "204 No Content";
Response.StatusCode = 204;
Response.End();
}
}
On Body
<asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">LinkButton</asp:LinkButton>
<asp:Literal runat="server" ID="txtDebug"></asp:Literal>
And here is the code that generate on html, and you can get the doPostBack and call it by your javascript.
<a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
What about if the page and the function is not run ? Then an empty page appear and say that the page can not load, because the return 204 never get back to the user to stop the loading .!