दिलचस्प पोस्ट
पायथन: "..% (var) s .." का प्रयोग कर रहा है% स्थानीय लोगों () एक अच्छा अभ्यास है? ग्राफ़ एपीआई 'गलत' या 'असम्बद्ध प्राप्त अनुरोध' सार्वजनिक फेसबुक पेज का उपयोग करता है क्या तुच्छ कुंजी के मामले में अनारडेड_मैप पर मानचित्र का उपयोग करने का कोई फायदा है? ACTION_SCREEN_OFF के लिए सुनना क्रिया बार में ओवरफ़्लो आइकन बदलना पायथन सबप्रोसेस फ़ाइल और टर्मिनल में बच्चों के आउटपुट को प्राप्त करता है? वेब स्क्रैपिंग जावास्क्रिप्ट पेज पायथन के साथ प्रकार या नाम स्थान का नाम मौजूद नहीं है JQuery में JSON ऑब्जेक्ट में एक HTML तालिका डेटा परिवर्तित करें अवलोकन के समय को सूचित करें जब आइटम में परिवर्तन होता है मैटप्ललिब के साथ कई सबप्लॉट्स के लिए मैं एक एकल किंवदंती कैसे बना सकता हूं? आईफोन कुंजीपटल भाषा सेट करना कुछ तकनीकी रूप से क्रमबद्ध इनपुट गुण serializable क्यों नहीं हैं? एक्स घंटे से पुराने फ़ाइलों को कैसे हटाएं ऑब्जेक्ट के अंदर सभी सहयोगी / समग्र वस्तुएं प्राप्त करें (सार रास्ते में)

ASP.NET MVC नियंत्रक कार्य जो JSON या आंशिक HTML वापस आते हैं

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

वेब के समाधान से एकत्रित समाधान "ASP.NET MVC नियंत्रक कार्य जो JSON या आंशिक HTML वापस आते हैं"

अपने ऐक्शन मेथ में जेसन (ऑब्जेक्ट) को अपने पेज पर जेसनॉन वापस करने के लिए वापस लौटाएं।

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

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

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

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

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

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

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

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

मुझे लगता है कि आपको अनुरोध के स्वीकार प्रकारों पर विचार करना चाहिए। मैं इसे अपने वर्तमान प्रोजेक्ट में सही सामग्री प्रकार को वापस करने के लिए उपयोग कर रहा हूं।

नियंत्रक पर आपकी कार्रवाई अनुरोध ऑब्जेक्ट के रूप में इसका परीक्षण कर सकती है

 if (Request.AcceptTypes.Contains("text/html")) { return View(); } else if (Request.AcceptTypes.Contains("application/json")) { return Json( new { id=1, value="new" } ); } else if (Request.AcceptTypes.Contains("application/xml") || Request.AcceptTypes.Contains("text/xml")) { // } 

आंशिक एक्सएचटीएमएल प्रतिक्रिया के मामले को पूरा करने के लिए आप दृश्य के एएसपीएक्स को लागू कर सकते हैं।

फिर jQuery में आप इसे जेएसएन के प्रकार पैरामीटर के रूप में पास कर सकते हैं:

 $.get(url, null, function(data, textStatus) { console.log('got %o with status %s', data, textStatus); }, "json"); // or xml, html, script, json, jsonp or text 

उम्मीद है कि यह जेम्स की मदद करता है

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

मुझे कुछ ऐसे मुद्दे मिलते हैं जो एमवीसी अजाक्स जीटीओ के साथ कॉल करता है, जो मुझे इस तरह से समाधान साझा करने के लिए सिर दर्द का कारण बना।

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

नमूना 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); } }); 

नमूना MVC कोड:

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

दूसरे आधे प्रश्न का उत्तर देने के लिए, आप कॉल कर सकते हैं:

 return PartialView("viewname"); 

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

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

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

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

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

कार्रवाई वापस जेसन

नियंत्रक

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

कार्रवाई वापसी HTML

नियंत्रक

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

जो लोग एमवीसी 3 में अपग्रेड कर चुके हैं, वे यहाँ एमवीसी 3 और जेएसन का इस्तेमाल करते हुए एक सुव्यवस्थित तरीका है

आंशिक दृश्यक्षेत्र और 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 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); } }