Call ASP.NET function from JavaScript?

后端 未结 20 1931
暗喜
暗喜 2020-11-22 07:21

I\'m writing a web page in ASP.NET. I have some JavaScript code, and I have a submit button with a click event.

Is it possible to call a method I created in ASP with

相关标签:
20条回答
  • 2020-11-22 08:15

    You can also get it by just adding this line in your JavaScript code:

    document.getElementById('<%=btnName.ClientID%>').click()
    

    I think this one is very much easy!

    0 讨论(0)
  • 2020-11-22 08:16

    I think blog post How to fetch & show SQL Server database data in ASP.NET page using Ajax (jQuery) will help you.

    JavaScript Code

    <script src="http://code.jquery.com/jquery-3.3.1.js" />
    <script language="javascript" type="text/javascript">
    
        function GetCompanies() {
            $("#UpdatePanel").html("<div style='text-align:center; background-color:yellow; border:1px solid red; padding:3px; width:200px'>Please Wait...</div>");
            $.ajax({
                type: "POST",
                url: "Default.aspx/GetCompanies",
                data: "{}",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: OnSuccess,
                error: OnError
            });
        }
    
        function OnSuccess(data) {
            var TableContent = "<table border='0'>" +
                                    "<tr>" +
                                        "<td>Rank</td>" +
                                        "<td>Company Name</td>" +
                                        "<td>Revenue</td>" +
                                        "<td>Industry</td>" +
                                    "</tr>";
            for (var i = 0; i < data.d.length; i++) {
                TableContent += "<tr>" +
                                        "<td>"+ data.d[i].Rank +"</td>" +
                                        "<td>"+data.d[i].CompanyName+"</td>" +
                                        "<td>"+data.d[i].Revenue+"</td>" +
                                        "<td>"+data.d[i].Industry+"</td>" +
                                    "</tr>";
            }
            TableContent += "</table>";
    
            $("#UpdatePanel").html(TableContent);
        }
    
        function OnError(data) {
    
        }
    </script>
    

    ASP.NET Server Side Function

    [WebMethod]
    [ScriptMethod(ResponseFormat= ResponseFormat.Json)]
    public static List<TopCompany> GetCompanies()
    {
        System.Threading.Thread.Sleep(5000);
        List<TopCompany> allCompany = new List<TopCompany>();
        using (MyDatabaseEntities dc = new MyDatabaseEntities())
        {
            allCompany = dc.TopCompanies.ToList();
        }
        return allCompany;
    }
    
    0 讨论(0)
  • 2020-11-22 08:17

    I'm trying to implement this but it's not working right. The page is posting back, but my code isn't getting executed. When i debug the page, the RaisePostBackEvent never gets fired. One thing i did differently is I'm doing this in a user control instead of an aspx page.

    If anyone else is like Merk, and having trouble over coming this, I have a solution:

    When you have a user control, it seems you must also create the PostBackEventHandler in the parent page. And then you can invoke the user control's PostBackEventHandler by calling it directly. See below:

    public void RaisePostBackEvent(string _arg)
    {
        UserControlID.RaisePostBackEvent(_arg);
    }
    

    Where UserControlID is the ID you gave the user control on the parent page when you nested it in the mark up.

    Note: You can also simply just call methods belonging to that user control directly (in which case, you would only need the RaisePostBackEvent handler in the parent page):

    public void RaisePostBackEvent(string _arg)
    {
        UserControlID.method1();
        UserControlID.method2();
    }
    
    0 讨论(0)
  • 2020-11-22 08:17

    I try this and so I could run an Asp.Net method while using jQuery.

    1. Do a page redirect in your jQuery code

      window.location = "Page.aspx?key=1";
      
    2. Then use a Query String in Page Load

      protected void Page_Load(object sender, EventArgs e)
      {
          if (Request.QueryString["key"] != null)
          {
              string key= Request.QueryString["key"];
              if (key=="1")
              {
                  // Some code
              }
          }
      }
      

    So no need to run an extra code

    0 讨论(0)
  • 2020-11-22 08:20

    Static, strongly-typed programming has always felt very natural to me, so at first I resisted learning JavaScript (not to mention HTML and CSS) when I had to build web-based front-ends for my applications. I would do anything to work around this like redirecting to a page just to perform and action on the OnLoad event, as long as I could code pure C#.

    You will find however that if you are going to be working with websites, you must have an open mind and start thinking more web-oriented (that is, don't try to do client-side things on the server and vice-versa). I love ASP.NET webforms and still use it (as well as MVC), but I will say that by trying to make things simpler and hiding the separation of client and server it can confuse newcomers and actually end up making things more difficult at times.

    My advice is to learn some basic JavaScript (how to register events, retrieve DOM objects, manipulate CSS, etc.) and you will find web programming much more enjoyable (not to mention easier). A lot of people mentioned different Ajax libraries, but I didn't see any actual Ajax examples, so here it goes. (If you are not familiar with Ajax, all it is, is making an asynchronous HTTP request to refresh content (or perhaps perform a server-side action in your scenario) without reloading the entire page or doing a full postback.

    Client-Side:

    <script type="text/javascript">
    var xmlhttp = new XMLHttpRequest(); // Create object that will make the request
    xmlhttp.open("GET", "http://example.org/api/service", "true"); // configure object (method, URL, async)
    xmlhttp.send(); // Send request
    
    xmlhttp.onstatereadychange = function() { // Register a function to run when the state changes, if the request has finished and the stats code is 200 (OK). Write result to <p>
        if (xmlhttp.readyState == 4 && xmlhttp.statsCode == 200) {
              document.getElementById("resultText").innerHTML = xmlhttp.responseText;
        }
    };
    </script>
    

    That's it. Although the name can be misleading the result can be in plain text or JSON as well, you are not limited to XML. jQuery provides an even simpler interface for making Ajax calls (among simplifying other JavaScript tasks).

    The request can be an HTTP-POST or HTTP-GET and does not have to be to a webpage, but you can post to any service that listens for HTTP requests such as a RESTful API. The ASP.NET MVC 4 Web API makes setting up the server-side web service to handle the request a breeze as well. But many people do not know that you can also add API controllers to web forms project and use them to handle Ajax calls like this.

    Server-Side:

    public class DataController : ApiController
    {
        public HttpResponseMessage<string[]> Get()
        {
            HttpResponseMessage<string[]> response = new HttpResponseMessage<string[]>(
                Repository.Get(true),
                new MediaTypeHeaderValue("application/json")
            );
    
            return response;
        }
    }
    

    Global.asax

    Then just register the HTTP route in your Global.asax file, so ASP.NET will know how to direct the request.

    void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapHttpRoute("Service", "api/{controller}/{id}");
    }
    

    With AJAX and Controllers, you can post back to the server at any time asynchronously to perform any server side operation. This one-two punch provides both the flexibility of JavaScript and the power the C# / ASP.NET, giving the people visiting your site a better overall experience. Without sacrificing anything, you get the best of both worlds.

    References

    • Ajax,
    • jQuery Ajax,
    • Controller in Webforms
    0 讨论(0)
  • 2020-11-22 08:24

    You might want to create a web service for your common methods.
    Just add a WebMethodAttribute over the functions you want to call, and that's about it.
    Having a web service with all your common stuff also makes the system easier to maintain.

    0 讨论(0)
提交回复
热议问题