Paul T. Rykiel
Paul T. Rykiel

Reputation: 1227

Why isn't my page doing a refresh when calling my controller though an Ajax call

Here is my markup that executes the JavaScript/ajax callback to the controller. What I am trying to do is have this click function activate a tab component, which it does, and execute the action in the Controller.

<ul class="nav nav-tabs">
    <li class="active"><a href="#tab1" onclick="setCert(0);" data-toggle="tab">Registered</a></li>
    <li><a href="#tab2" onclick="setCert(1);" data-toggle="tab">Certified</a></li>
</ul>

Here is the JavaScript

   function setCert(cert){
        $.ajax({
            url: '/Home/CommunitiesLanding/' + cert,
            type: "GET",
            traditional: true,
            contentType: "application/json",

            success: function () {

                console.log('success!!');
            }
        });

and lastly here is my controller:

 public ActionResult CommunitiesLanding(int id)
    {
        var model = new CommunitiesViewModel();
        var comm = new List<CommunityPoints>();
        var mapPoints = new List<CommunityPoints>();
        var mapPoints2 = new List<CommunityPoints>();
        var regComm = new List<Registered>();
        var certComm = new List<Certified>();
        var locationService = new GoogleLocationService();
        var communites = db.Communities.Where(x => x.Certified != true).OrderBy(x => x.CommunityState).ToList();
        var certCommunities = db.Communities.Where(x => x.Certified == true).OrderBy(x => x.CommunityState).ToList();
        var statecd = communites[0];
        var statecd2 = statecd.CommunityState;

        if (id == 0)
        {

            // Collect the Registered communites data
            foreach (var c in communites)
            {
                if (statecd2 != c.CommunityState)
                {
                    var reg = new Registered();
                    reg.state = statecd2;
                    reg.points = comm;
                    regComm.Add(reg);
                    comm = new List<CommunityPoints>();
                    statecd2 = c.CommunityState;
                }

                var communityPts = new CommunityPoints();
                var points = locationService.GetLatLongFromAddress(c.CommunityZip);
                communityPts.CommunityId = c.CommunityId;
                communityPts.CommunityName = c.ComunityName;
                communityPts.latitude = points.Latitude.ToString();
                communityPts.longitude = points.Longitude.ToString();
                communityPts.state = c.CommunityState;
                comm.Add(communityPts);
                mapPoints.Add(communityPts);

            }

            // Collect the very last collection of state data
            var Lastreg = new Registered();
            Lastreg.state = statecd2;
            Lastreg.points = comm;
            comm = new List<CommunityPoints>();
            regComm.Add(Lastreg);

        }
        else
        {
            // Collect Data For the Certified Communites
            statecd = certCommunities[0];
            statecd2 = statecd.CommunityState;
            foreach (var c in certCommunities)
            {
                if (statecd2 != c.CommunityState)
                {
                    var cert = new Certified();
                    cert.state = statecd2;
                    cert.points = comm;
                    certComm.Add(cert);
                    comm = new List<CommunityPoints>();
                    statecd2 = c.CommunityState;
                }

                var communityPts = new CommunityPoints();
                var points = locationService.GetLatLongFromAddress(c.CommunityZip);
                communityPts.CommunityId = c.CommunityId;
                communityPts.CommunityName = c.ComunityName;
                communityPts.latitude = points.Latitude.ToString();
                communityPts.longitude = points.Longitude.ToString();
                communityPts.state = c.CommunityState;
                comm.Add(communityPts);
                mapPoints2.Add(communityPts);
            }

            // Collect the very last collection of state data
            var Lastcert = new Certified();
            Lastcert.state = statecd2;
            Lastcert.points = comm;
            comm = new List<CommunityPoints>();
            certComm.Add(Lastcert);
        }

        model.regCommunities = regComm;
        model.cerCommunities = certComm;
        model.regPoints = mapPoints;
        model.certPoints = mapPoints2;
        return View(model);
    }

Upvotes: 0

Views: 59

Answers (1)

Rob M.
Rob M.

Reputation: 36511

If your goal is to make the AJAX request to initialize some data and then redirect the user to the newly initialized page once the server is done processing, you can update your AJAX function to redirect on success:

function setCert(cert) {
    var url = '/Home/CommunitiesLanding/' + cert;
    $.ajax({
        url: url,
        type: "GET",
        traditional: true,
        contentType: "application/json",
        success: function () {
           // redirect user to URL
           location.href = url;
        }
    });
}

It might make more sense to just redirect the user directly though, if you don't need to initialize data and wait for it to complete beforehand:

function setCert(cert) {
   location.href = '/Home/CommunitiesLanding/' + cert;
}

Upvotes: 1

Related Questions