2012-11-05 16 views
5

का उपयोग कर रहा ajax अनुरोधAjax अनुरोध MVC 4.0 # ग

सी # कोड से एक रिकार्ड वापस करना चाहते है:

[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.DropDownList("ddlWorkout", new SelectList(ViewBag.ddlWorkout, "Id", "Name"), "--Select Workout--", new { required = true, onchange = "GetSavedWorkoutTemplate(this);", style = "width:310px" }) 

सफलता समारोह में मुझे परिणाम मिला "TheGYM.We b.Models.WorkoutsViewModel "एक स्ट्रिंग के रूप में एक मॉडल नहीं है, कृपया मुझे सही करें कि मैं क्या गलत कर रहा हूं, मैं एक मॉडल वापस करना चाहता हूं।

उत्तर

3

सी # में आपको ऑब्जेक्ट को क्रमबद्ध करने के लिए Json() का उपयोग करने की आवश्यकता है। इसे आज़माएं:

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

नोट: मत भूलना 'ActionResult' या' JsonResult' करने के लिए कार्रवाई की वापसी प्रकार बदलने के लिए। – rcdmk

+0

@ आरसीडीएमके आह, याद किया - बहुत धन्यवाद –

+1

धन्यवाद अब यह काम कर रहा है –

7

आपको एक मॉडल ऑब्जेक्ट नहीं, एक जेसनरसेट वापस करना होगा।

यह करने के लिए अपनी कार्रवाई बदलें:

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