উত্তর:
আপনার ক্রিয়া পদ্ধতিতে আপনার পৃষ্ঠায় জেএসএনকে ফিরিয়ে দিতে জসন (অবজেক্ট) ফিরিয়ে দিন।
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
তারপরে কেবল অজ্যাক্স ব্যবহার করে অ্যাকশন পদ্ধতিতে কল করুন। আপনি ভিউপেজ থেকে সহায়ক সহায়কগুলির একটি ব্যবহার করতে পারেন
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
সামমথোদ একটি জাভাস্ক্রিপ্ট পদ্ধতি হবে যা জেসন বস্তুটি ফিরে আসার মূল্যায়ন করে।
আপনি যদি কোনও সরল স্ট্রিং ফিরে আসতে চান তবে আপনি কেবলমাত্র বিষয়বস্তু ফলাফল ব্যবহার করতে পারেন:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ডিফল্টরূপে ContentResult এর পাঠ্য / প্লেইনটিকে তার সামগ্রী টাইপ হিসাবে ফেরত দেয়।
এটি ওভারলোডযোগ্য তাই আপনি এটি করতেও পারেন:
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"});
}
জ্যাকারি থেকে জেএসএসন পদ্ধতিটি সহজভাবে পদ্ধতি ...
$.getJSON("../SomeActionMethod", { id: someId },
function(data) {
alert(data.foo);
alert(data.baz);
}
);
return Json(new {foo="bar", baz="Blech"});
!
আমি জিউকিরির সাথে এমভিসি আজাক্স জিইটি কলগুলি বাস্তবায়িত করার জন্য বেশ কয়েকটি সমস্যার সন্ধান পেয়েছি যা এখানে আমার মাথাব্যথার কারণ নিয়ে সমাধানগুলি ভাগ করে নেওয়ার কারণ হয়েছে।
JsonRequestBehavior.AllowGet
; এটি ছাড়াই এমভিসি একটি এইচটিটিপি 500 ত্রুটি ( dataType: json
ক্লায়েন্টের সাথে নির্দিষ্ট করে) ফিরিয়ে দিচ্ছিল ।cache: false
$ .ajax কলে, অন্যথায় আপনি (HTTP 200 প্রতিক্রিয়া পরিবর্তে) পরিণামে পেতে HTTP- র 304 প্রতিক্রিয়া এবং সার্ভার আপনার অনুরোধ প্রক্রিয়া করব না হবে।নমুনা জিকুয়েরি:
$.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);
}
প্রশ্নের অর্ধেক উত্তর দেওয়ার জন্য, আপনি কল করতে পারেন:
return PartialView("viewname");
আপনি যখন আংশিক এইচটিএমএল ফিরে আসতে চান। অনুরোধটি JSON বা এইচটিএমএল চায় কিনা, সম্ভবত কোনও URL অংশ / প্যারামিটারের ভিত্তিতে সিদ্ধান্ত নেওয়ার জন্য আপনাকে কিছু উপায় খুঁজে বের করতে হবে।
ইনকডিং ফ্রেমওয়ার্ক সহ বিকল্প সমাধান
অ্যাকশন রিটার্ন জেসন
নিয়ামক
[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())
আপনি এই খুব সহায়ক নিবন্ধটি একবার দেখতে চান যা এটি খুব সুন্দরভাবে কভার করে!
কেবল ভেবেছিল এটি এই সমস্যার ভাল সমাধান অনুসন্ধান করতে লোকদের সহায়তা করতে পারে।
http://weblogs.asp.net/rashid/archive/2009/04/15/adaptive-rendering-in-asp-net-mvc.aspx
আংশিকভিউ রিসাল্ট এবং জেএসনরউসল্ট বেস ক্লাস অ্যাকশনারসাল্ট থেকে উত্তরাধিকারী। সুতরাং যদি রিটার্নের ধরণটি গতিশীলভাবে পদ্ধতি আউটপুটকে অ্যাকশনারসাল্ট হিসাবে ঘোষণা করে।
public ActionResult DynamicReturnType(string parameter)
{
if (parameter == "JSON")
return Json("<JSON>", JsonRequestBehavior.AllowGet);
else if (parameter == "PartialView")
return PartialView("<ViewName>");
else
return null;
}
যে লোকেরা এমভিসি 3 তে উন্নীত হয়েছে তাদের জন্য এখানে এমভিসি 3 এবং জসন ব্যবহারের ঝরঝরে উপায়
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);
}
}
অনুরোধের ভিত্তিতে বিভিন্ন আউটপুট উত্পাদন করতে নমনীয় পদ্ধতির approach
public class AuctionsController : Controller
{
public ActionResult Auction(long id)
{
var db = new DataContext();
var auction = db.Auctions.Find(id);
// Respond to AJAX requests
if (Request.IsAjaxRequest())
return PartialView("Auction", auction);
// Respond to JSON requests
if (Request.IsJsonRequest())
return Json(auction);
// Default to a "normal" view with layout
return View("Auction", auction);
}
}
Request.IsAjaxRequest()
পদ্ধতি খুবই সহজ: এটা নিছক পরীক্ষা HTTP- র হেডার জন্য ইনকামিং অনুরোধ কিনা দেখতে মান এক্স-অনুরোধ করা-সঙ্গে শিরক হচ্ছে না XMLHttpRequest
যা স্বয়ংক্রিয়ভাবে অধিকাংশ ব্রাউজার এবং AJAX অবকাঠামো দ্বারা যোগ করা হয়।
অনুরোধটি জসনের জন্য কিনা তা যাচাই করার জন্য কাস্টম এক্সটেনশন পদ্ধতিটি যাতে আমরা যেকোন জায়গা থেকে অনুরোধ করতে পারি, অনুরোধ।আইএসএজএক্সআরেক্সেস্ট () এক্সটেনশন পদ্ধতির মতো:
using System;
using System.Web;
public static class JsonRequestExtensions
{
public static bool IsJsonRequest(this HttpRequestBase request)
{
return string.Equals(request["format"], "json");
}
}