2012-11-05 15 views
5

chcę wrócić rekordu przez żądanie ajaxAjax żądanie MVC 4.0 przy użyciu C#

C# kod jest jako:

[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(); 
    } 

Kod jQuery jest:

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

W funkcji sukcesu otrzymałem wynik jako "TheGYM.We b.Models.WorkoutsViewModel "jako ciąg nie model, popraw mnie, co robię źle, chcę zwrócić model.

Odpowiedz

3

W języku C# należy użyć Json(), aby poprawnie serializować obiekt. Wypróbuj to:

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); 
} 
+0

Uwaga: Nie zapomnij, aby zmienić typ zwracany skargi do 'ActionResult' lub' JsonResult'. – rcdmk

+0

@rcdmk Ah, tęskniłem za tym - bardzo dziękuję –

+1

Dzięki temu, że działa teraz –

7

Musisz zwrócić obiekt JsonResult, a nie obiekt modelu.

Zmień swoje działania w tym:

[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()); 
} 
Powiązane problemy