Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC Page not Updated when using AJAX

I have an ASP.NET MVC project where I want to post an article to the database then display a snippet of the article on the page. When a user comments, I also want to display the comment once I have saved to the database. I am using AJAX for this and call OnFailure and OnSuccess methods in both cases.

The OnFailure method only fires up when I save a post and not a comment (this is because the page isn't updated even when I save successfully). The OnSuccess method isn't invoked at all which is because my page isn't updated.

I am using jquery 2.1.4 and have jquery.unobtrusive-ajax script loaded in my project

Here is my code.

//View for creating a post

 @using (Ajax.BeginForm("Create", "Post",
new AjaxOptions
{
    HttpMethod = "POST",
    UpdateTargetId = "insertnewpostbelow",
    InsertionMode = InsertionMode.InsertAfter,
    OnSuccess = "postingSucceeded()",
    OnFailure = "postingFailed()"
}))
 {
  //View code left out 
 }

//Server side for saving post and updating PartialView

 [HttpPost, ValidateAntiForgeryToken, ValidateInput(false)]
    public async Task<PartialViewResult> Create
        ([Bind(Include = "ID,Title,Message,PostedOn,isAbuse,By")] Post post)
    {
        if (ModelState.IsValid)
        {
            var list = new List<Post>();
            list.Add(post);

            try
            {
                db.Posts.Add(post);
                await db.SaveChangesAsync();

                return PartialView("_Posts", list);
            }
            catch (RetryLimitExceededException)
            {
                ModelState.AddModelError("", "Unable to login, please try again and contact administrator if the problem persists.");

                //If we got this far, model has errors.
                ViewBag.By = new SelectList(db.Members, "ID", "FullNames", post.By);
                return PartialView("_Posts", post);
            }
        }

        //If we got this far, model has errors.
        ViewBag.By = new SelectList(db.Members, "ID", "FullNames", post.By);
        return PartialView("_Posts", post);
    }

//My JavaScript file

    function postingSucceeded() {
    alert("Posting succeeded.");
}

function postingFailed() {
    alert("Posting failured.");
}

//Portion of the View to update

<div id="big-posts">
        <span id="insertnewpostbelow"></span>

        @Html.Partial("_Posts", Model.Posts)
    </div>

What am I missing out, thanks in advance.

like image 959
Dev Avatar asked Sep 26 '15 14:09

Dev


People also ask

How reload page after Ajax call in MVC?

The . reload() method can be triggered either explicitly (with a button click) or automatically. You can also use the . reload() method inside an Ajax success callback function and this is very simple.

Can we use Ajax in MVC?

The MVC Framework contains built-in support for unobtrusive Ajax. You can use the helper methods to define your Ajax features without adding a code throughout all the views. This feature in MVC is based on the jQuery features. To enable the unobtrusive AJAX support in the MVC application, open the Web.

Can Ajax work with ASP NET?

AJAX is used to create dynamic web pages that do not require page reloading when any part of the whole web page content or the whole web page content is changed. The server data exchange is asynchronous in nature and AJAX in ASP.net uses multiple technologies like XSLT, XHTML, CSS, JavaScript, etc.

Can we implement Ajax using jQuery in MVC?

Using AJAX In ASP.NET MVC. Implementation of Ajax can be done in two way in ASP.Net Application: using Update Panel and, using jQuery.


2 Answers

You need to put the content of the returned partial view somewhere on the page

<div id="big-posts">
   <span id="insertnewpostbelow"></span>
   <div id="newPost"></div>
</div>

On the call back function try:

function postingSucceeded(data) {
    $("#newPost").html(data);
}

Hope this helps!

like image 186
Mr. Robot Jr. Avatar answered Sep 23 '22 00:09

Mr. Robot Jr.


This is because you have an Ajax form in _Posts PartialView. After the placement, say, after <span id="insertnewpostbelow"></span> you need to run jquery.unobtrusive-ajax on page again.

Note that the scripts will render on page loads, not after any changes in page (like updates by PartialView).

Solution: call the script again, after the page update :)

like image 43
Amirhossein Mehrvarzi Avatar answered Sep 23 '22 00:09

Amirhossein Mehrvarzi