ajax - एएसपी.नेट एमवीसी नियंत्रक क्रियाएँ जो जेएसओएन या आंशिक एचटीएमएल लौटाती हैं




asp.net-mvc json (8)

JSON डेटा से निपटने का एक और अच्छा तरीका JQuery getJSON फ़ंक्शन का उपयोग कर रहा है। आप कॉल कर सकते हैं

public ActionResult SomeActionMethod(int id) 
{ 
    return Json(new {foo="bar", baz="Blech"});
}

Jquery getJSON विधि से विधि बस ...

$.getJSON("../SomeActionMethod", { id: someId },
    function(data) {
        alert(data.foo);
        alert(data.baz);
    }
);

मैं नियंत्रक क्रियाएं बनाने की कोशिश कर रहा हूं जो पैरामीटर के आधार पर या तो JSON या आंशिक HTML लौटाएंगे। परिणाम को एमवीसी पृष्ठ पर असीमित रूप से वापस लाने का सबसे अच्छा तरीका क्या है?


PartialViewResult और JSONReuslt बेस क्लास ActionResult से प्राप्त होता है। इसलिए अगर रिटर्न प्रकार का निर्णय लिया जाता है तो गतिशील रूप से एक्शन रिसेट के रूप में विधि आउटपुट घोषित करें।

public ActionResult DynamicReturnType(string parameter)
        {
            if (parameter == "JSON")
                return Json("<JSON>", JsonRequestBehavior.AllowGet);
            else if (parameter == "PartialView")
                return PartialView("<ViewName>");
            else
                return null;


        }

अपनी क्रिया विधि में, जेएसओएन (ऑब्जेक्ट) को अपने पृष्ठ पर जेएसओएन वापस करने के लिए वापस करें।

public ActionResult SomeActionMethod() {
  return Json(new {foo="bar", baz="Blech"});
}

फिर अजाक्स का उपयोग करके एक्शन विधि को कॉल करें। आप व्यूपेज से एक सहायक तरीके का उपयोग कर सकते हैं जैसे कि

<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>

कुछ विधि एक जावास्क्रिप्ट विधि होगी जो उसके बाद जेसन ऑब्जेक्ट का मूल्यांकन करेगी।

यदि आप एक सादा स्ट्रिंग वापस करना चाहते हैं, तो आप केवल ContentResult का उपयोग कर सकते हैं:

public ActionResult SomeActionMethod() {
    return Content("hello world!");
}

डिफ़ॉल्ट रूप से ContentResult एक सामग्री / सादा अपनी सामग्री के रूप में देता है टाइप करें।
यह अधिभार योग्य है ताकि आप यह भी कर सकें:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");

आप इस बहुत ही उपयोगी लेख को देखना चाहते हैं जो इसे बहुत अच्छी तरह से कवर करता है!

बस सोचा कि यह लोगों को इस समस्या के लिए एक अच्छा समाधान खोजने में मदद कर सकता है।

http://weblogs.asp.net/rashid/archive/2009/04/15/adaptive-rendering-in-asp-net-mvc.aspx


प्रश्न के दूसरे भाग का जवाब देने के लिए, आप कॉल कर सकते हैं:

return PartialView("viewname");

जब आप आंशिक HTML वापस करना चाहते हैं। आपको यह तय करने के लिए कुछ रास्ता तय करना होगा कि अनुरोध जेएसओएन या एचटीएमएल चाहता है, शायद यूआरएल भाग / पैरामीटर के आधार पर।


मुझे एमवीसी अजाक्स को लागू करने में कुछ समस्याएं मिलीं जो JQuery के साथ कॉल करती हैं जिसने मुझे सिरदर्द को यहां समाधान साझा करने का कारण बना दिया।

  1. AJAX कॉल में डेटा प्रकार "जेसन" शामिल करना सुनिश्चित करें। यह स्वचालित रूप से आपके लिए लौटाए गए JSON ऑब्जेक्ट को पार्स करेगा (सर्वर को वैध जेसन लौटाता है)।
  2. JsonRequestBehavior.AllowGet शामिल करें; इस एमवीसी के बिना एक HTTP 500 त्रुटि लौटा रहा था ( dataType: json साथ dataType: json क्लाइंट पर dataType: json निर्दिष्ट)।
  3. cache: false जोड़ें cache: false $ .ajax कॉल पर cache: false , अन्यथा आपको अंततः HTTP 304 प्रतिक्रियाएं मिलेंगी (HTTP 200 प्रतिक्रियाओं के बजाय) और सर्वर आपके अनुरोध को संसाधित नहीं करेगा।
  4. अंत में, जेसन केस संवेदनशील है, इसलिए तत्वों के आवरण को सर्वर की तरफ और क्लाइंट साइड पर मिलान करने की आवश्यकता है।

नमूना JQuery:

$.ajax({
  type: 'get',
  dataType: 'json',
  cache: false,
  url: '/MyController/MyMethod',
  data: { keyid: 1, newval: 10 },
  success: function (response, textStatus, jqXHR) {
    alert(parseInt(response.oldval) + ' changed to ' + newval);                                    
  },
  error: function(jqXHR, textStatus, errorThrown) {
    alert('Error - ' + errorThrown);
  }
});

नमूना एमवीसी कोड:

[HttpGet]
public ActionResult MyMethod(int keyid, int newval)
{
  var oldval = 0;

  using (var db = new MyContext())
  {
    var dbRecord = db.MyTable.Where(t => t.keyid == keyid).FirstOrDefault();

    if (dbRecord != null)
    {
      oldval = dbRecord.TheValue;
      dbRecord.TheValue = newval;
      db.SaveChanges();
    }
  }

    return Json(new { success = true, oldval = oldval},
                JsonRequestBehavior.AllowGet);
}

इंकोडिंग ढांचे के साथ वैकल्पिक समाधान

एक्शन रिटर्न जेसन

नियंत्रक

    [HttpGet]
    public ActionResult SomeActionMethod()
    {
        return IncJson(new SomeVm(){Id = 1,Name ="Inc"});
    }

रेजर पेज

@using (var template = Html.Incoding().ScriptTemplate<SomeVm>("tmplId"))
{
    using (var each = template.ForEach())
    {
        <span> Id: @each.For(r=>r.Id) Name: @each.For(r=>r.Name)</span>
    }
}

@(Html.When(JqueryBind.InitIncoding)
  .Do()
  .AjaxGet(Url.Action("SomeActionMethod","SomeContoller"))
  .OnSuccess(dsl => dsl.Self().Core()
                              .Insert
                              .WithTemplate(Selector.Jquery.Id("tmplId"))
                              .Html())
  .AsHtmlAttributes()
  .ToDiv())

एक्शन रिटर्न एचटीएमएल

नियंत्रक

    [HttpGet]
    public ActionResult SomeActionMethod()
    {
        return IncView();
    }

रेजर पेज

@(Html.When(JqueryBind.InitIncoding)
  .Do()
  .AjaxGet(Url.Action("SomeActionMethod","SomeContoller"))
  .OnSuccess(dsl => dsl.Self().Core().Insert.Html())
  .AsHtmlAttributes()
  .ToDiv())

    public ActionResult GetExcelColumn()
    {            
            List<string> lstAppendColumn = new List<string>();
            lstAppendColumn.Add("First");
            lstAppendColumn.Add("Second");
            lstAppendColumn.Add("Third");
  return Json(new { lstAppendColumn = lstAppendColumn,  Status = "Success" }, JsonRequestBehavior.AllowGet);
            }
        }





asp.net-ajax