asp.net mvc - देखने के लिए MVC नियंत्रक से Json ऑब्जेक्ट कैसे लौटाएं



asp.net-mvc (3)

आप इस नियंत्रक कार्रवाई को कॉल करने के लिए AJAX का उपयोग कर सकते हैं। उदाहरण के लिए यदि आप jQuery का उपयोग कर रहे हैं तो आप $.ajax() विधि का उपयोग कर सकते हैं:

<script type="text/javascript">
    $.ajax({
        url: '@Url.Action("NameOfYourAction")',
        type: 'GET',
        cache: false,
        success: function(result) {
            // you could use the result.values dictionary here
        }
    });
</script>

https://code.i-harness.com

मैं एक एमवीसी एप्लिकेशन कर रहा हूं जहां मुझे नियंत्रक से जन्स ऑब्जेक्ट को देखने की आवश्यकता है।

var dictionary = listLocation.ToDictionary(x => x.label, x => x.value);
return Json(new { values = listLocation}, JsonRequestBehavior.AllowGet);

उपरोक्त कोड मैं अपने नियंत्रक में उपयोग कर रहा हूं, अब जब मैं दृश्य पृष्ठ को अपने ब्राउज़र में एक डाउनलोड संवाद खोलने के लिए तैनात करता हूं, तो जब मैं आवश्यक प्रारूप के रूप में फ़ाइल को खोलता हूं तो यह मुझे json वस्तु देता है।

अब मैं अपना दृश्य पृष्ठ वापस करना चाहता हूं, दृश्य पृष्ठ में json ऑब्जेक्ट को एक्सेस करना चाहता हूं। मैं उसे कैसे कर सकता हूँ।


जब आप return Json(...) हैं, तो आप विशेष रूप से MVC को दृश्य का उपयोग नहीं करने , और क्रमबद्ध JSON डेटा की सेवा के लिए कह रहे हैं। आपका ब्राउज़र एक डाउनलोड संवाद खोलता है क्योंकि यह नहीं जानता कि इस डेटा का क्या करना है।

यदि आप बदले में एक दृश्य वापस करना चाहते हैं, तो सामान्य रूप से आप जैसा return View(...) करेंगे:

var dictionary = listLocation.ToDictionary(x => x.label, x => x.value);
return View(new { Values = listLocation });

तब आपके विचार में, केवल JSON के रूप में अपने डेटा को एनकोड करें और इसे जावास्क्रिप्ट चर पर नियत करें:

<script>
    var values = @Html.Raw(Json.Encode(Model.Values));
</script>

संपादित करें

यहाँ थोड़ा और पूर्ण नमूना है। चूँकि आपके पास पर्याप्त संदर्भ नहीं है, इसलिए यह नमूना नियंत्रक Foo , एक्शन Bar और व्यू मॉडल FooBarModel । इसके अतिरिक्त, स्थानों की सूची हार्डकोड है:

नियंत्रकों / FooController.cs

public class FooController : Controller
{
    public ActionResult Bar()
    {
        var locations = new[]
        {
            new SelectListItem { Value = "US", Text = "United States" },
            new SelectListItem { Value = "CA", Text = "Canada" },
            new SelectListItem { Value = "MX", Text = "Mexico" },
        };

        var model = new FooBarModel
        {
            Locations = locations,
        };

        return View(model);
    }
}

मॉडल / FooBarModel.cs

public class FooBarModel
{
    public IEnumerable<SelectListItem> Locations { get; set; }
}

दृश्य / फू / Bar.cshtml

@model MyApp.Models.FooBarModel

<script>
    var locations = @Html.Raw(Json.Encode(Model.Locations));
</script>

आपकी त्रुटि संदेश के अनुसार, ऐसा लगता है कि आप असंगत प्रकार (यानी Ported_LI.Models.Locatio‌​n और MyApp.Models.Location ) का मिश्रण कर रहे हैं, इसलिए पुनर्कथन करने के लिए, नियंत्रक एक्शन मैच से भेजे गए प्रकार को सुनिश्चित करें कि क्या है दृश्य से प्राप्त किया। इस नमूने के लिए, विशेष रूप से, नियंत्रक में new FooBarModel @model MyApp.Models.FooBarModel दृश्य में मेल खाता है।


<script type="text/javascript">
jQuery(function () {
    var container = jQuery("\#content");
    jQuery(container)
     .kendoGrid({
         selectable: "single row",
         dataSource: new kendo.data.DataSource({
             transport: {
                 read: {
                     url: "@Url.Action("GetMsgDetails", "OutMessage")" + "?msgId=" + msgId,
                     dataType: "json",
                 },
             },
             batch: true,
         }),
         editable: "popup",
         columns: [
            { field: "Id", title: "Id", width: 250, hidden: true },
            { field: "Data", title: "Message Body", width: 100 },
           { field: "mobile", title: "Mobile Number", width: 100 },
         ]
     });
});






json