5

ajaxリクエストでレコードを返したい

C#コードは次のとおりです。

    [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コードは次のとおりです。

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" })

成功関数では、モデルではなく文字列として「TheGYM.Web.Models.WorkoutsViewModel」という結果が得られました。間違っていることを修正してください。モデルを返したいのですが。

4

2 に答える 2

7

モデルオブジェクトではなく、JsonResultを返す必要があります。

アクションを次のように変更します。

[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());
} 
于 2012-11-05T14:16:51.670 に答える
3

Json()C#では、オブジェクトを正しくシリアル化するためにを使用する必要があります。これを試して:

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);
}
于 2012-11-05T14:14:12.740 に答える