Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 591
Amit Kumar Avatar asked Nov 05 '12 14:11

Amit Kumar


2 Answers

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());
} 
like image 188
Ricardo Souza Avatar answered Oct 23 '22 11:10

Ricardo Souza


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);
}
like image 33
Rory McCrossan Avatar answered Oct 23 '22 11:10

Rory McCrossan