2012-11-05 4 views
5

ich einen Rekord von Ajax-RequestAjax-Request MVC 4.0 unter Verwendung von C#

C# -Code zurückkehren wollen, ist wie:

[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 ist:

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 Erfolgsfunktion bekam ich das Ergebnis als "TheGYM.We b.Models.WorkoutsViewModel "als string kein modell, bitte korrigieren sie was ich falsch mache, ich möchte ein modell zurückgeben.

Antwort

3

In C# müssen Sie Json() verwenden, um das Objekt korrekt zu serialisieren. Versuchen Sie dies:

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

Hinweis: Vergessen Sie nicht, den Rückgabetyp der Aktion 'ActionResult' oder' JsonResult' zu ändern. – rcdmk

+0

@rcdmk Ah, verpasste das - vielen Dank –

+1

Danke, es funktioniert jetzt –

7

Sie müssen ein JsonResult, kein Modellobjekt zurückgeben.

Ihre Aktion zu dieser Änderung:

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