Amit Kumar
Amit Kumar

Reputation: 1397

Ajax request MVC 4.0 using c#

I want to return a record by ajax request

C# code is as:

    [HttpPost]
    public WorkoutsViewModel GetSavedWorkoutTemplate(int WorkoutId)
    {
        return _db.Workouts.Where(w => w.Id == WorkoutId).Select(w => new WorkoutsViewModel
        {
            Tag = w.Tags.FirstOrDefault(),
            Name = w.Name,
            MaxEffort = w.MaxEffort,
            Id = w.Id,
            Description = w.Description,
            Compare = w.Compare,
            Category = w.Category
        }).FirstOrDefault();
    } 

jQuery code is:

function GetSavedWorkoutTemplate(obj) {      
    $("#Workout").hide();
    var WorkoutId = $(obj).val();
    if (WorkoutId == "") {
        return;
    }
    var dto = { "WorkoutId": WorkoutId };

    $.ajax({
        type: "post",
        url: "/MemberWorkout/GetSavedWorkoutTemplate",
        contenttype: "application/json; charset=utf-8",
        data: dto,       
        success: function (result) {
            debugger;
            $("#Workout").show();
        },
        error: function (result) {
            alert("Unable to update status.");
        }
    });
}

Html:

 @Html.DropDownList("ddlWorkout", new SelectList(ViewBag.ddlWorkout, "Id", "Name"), "--Select Workout--", new { required = true, onchange = "GetSavedWorkoutTemplate(this);", style = "width:310px" })

In success function I got result as "TheGYM.Web.Models.WorkoutsViewModel" as a string not a model, please correct me what I am doing wrong, I want to return a model.

Upvotes: 5

Views: 2049

Answers (2)

Ricardo Souza
Ricardo Souza

Reputation: 16456

You have to return a JsonResult, not a model object.

Change your action to this:

[HttpPost]
public ActionResult GetSavedWorkoutTemplate(int WorkoutId)
{
    return Json(_db.Workouts.Where(w => w.Id == WorkoutId).Select(w => new WorkoutsViewModel
    {
        Tag = w.Tags.FirstOrDefault(),
        Name = w.Name,
        MaxEffort = w.MaxEffort,
        Id = w.Id,
        Description = w.Description,
        Compare = w.Compare,
        Category = w.Category
    }).FirstOrDefault());
} 

Upvotes: 7

Rory McCrossan
Rory McCrossan

Reputation: 337560

In C# you need to use Json() to serialise the object correctly. Try this:

public ActionResult GetSavedWorkoutTemplate(int WorkoutId)
{
    var workout = _db.Workouts.Where(w => w.Id == WorkoutId).Select(w => new WorkoutsViewModel
    {
        Tag = w.Tags.FirstOrDefault(),
        Name = w.Name,
        MaxEffort = w.MaxEffort,
        Id = w.Id,
        Description = w.Description,
        Compare = w.Compare,
        Category = w.Category
    }).FirstOrDefault());
    return Json(workout);
}

Upvotes: 3

Related Questions