0

I have an MVC 5 web application and I wish to include a partial view within one of the views which is updated using JQuery and Ajax. I have used a bit of JQuery, Ajax and Partial Views before, but never to do a real time update.

I have checked stackoverflow and whilst I can find a lot of posts on this topic, I am still struggling a bit to understand how it might work. If I show you my intended code below it would be great if someone could advice me if I'm on the correct track.

1 - User hits Index method in Controller which get's user details, puts user data into ViewModel and passes ViewModel to View.

public ActionResult Index(int id)
{
        DashboardViewModel model = new DashboardViewModel();

        User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
        model.SelectedUser = user;

        return View(model);
}

2 - View accepts ViewModel, and also contains Partial View which accepts data from the ViewModel. Partial view then displays the users email address.

View

@model STAR.UI.ViewModels.DashboardViewModel

<div class="row">
    <div class="col-lg-10" id="myPartial">
        @Html.Partial("_UserEmailPartial", Model.SelectedUser)
    </div>
</div>

Partial (_UserEmailPartial)

@model STAR.DomainClasses.User

<h1 class="page-header text-danger">@Model.email</h1>

3 - View also contains drop down list which user can select other users from.

<select id="UserID" class="form-control">
   <option>1</option>
   <option>2</option>
   <option>3</option>
   <option>4</option>
   <option>5</option>
 </select>

When user selects item from drop down list, a JQuery function which contains an AJAX method calls the Index action in the Controller.

$(document).ready(function () {

$("#UserID").change(ChangeEventOfDDL);

function ChangeEventOfDDL() {

    $.ajax({
        type: "GET",
        url: '/Dashboard/Index/',
        data: { id: $(this).val() },
        error: function () {
            alert("An error occurred.");
        },
        success: function (data) {
            $("#myPartial").html(data);
        }
    });
    }

});

4 - The Index method accepts the ID from the drop down list, gets the selected users details, populates the ViewModel and passes to the View.

Next is where I'm not sure. I know I need to pass the data into the DIV "myPartial", but how do I only pass in the data, not the entire View?

Any help would be greatly appreciated.

Thanks.

1 Answer 1

1

It would be best to add another action to your controller that would return the partial view:

public ActionResult UserEmail(int id)
{
    User user = _userService.GetUserByID(id);

    return PartialView("_UserEmailPartial", user);
}

Then modify the JS on the client to call this new action:

function ChangeEventOfDDL() {
    $.ajax({
        type: "GET",
        url: '/Dashboard/UserEmail/',
        data: { id: $(this).val() },
        error: function () {
            alert("An error occurred.");
        },
        success: function (data) {
            $("#myPartial").html(data);
        }
    });
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.