PDA

View Full Version : ارسال داده توسط Json



phpphp7
جمعه 18 اسفند 1396, 17:39 عصر
سلام دوستان




public ActionResult Section(int ID)
{
if (Session["Username"] == null)
return RedirectToAction("Login", "Home");


string u = Session["Username"].ToString();

// برای بررسی کردن اینکه کسی نتونه به صورت غیر مجاز این بخش رو نگاه کنه
var cc = (from a in db.Tbl_Category
join b in db.Tbl_User on a.Username equals b.Username
join c in db.Tbl_Section on a.Category_ID equals c.Category_ID
where b.Username.Equals(u) && c.Category_ID.Equals(ID)
select c).ToList();

return View(cc);
}



میخوام cc رو به صورت json پاس بدهم به view که بتوانم در javascript ازش استفاده کنم

باید چیکار کنم ؟


از return Json(cc); استفاده کردم اما مشکل اینجاست تو مرورگر وقتی باز میشه ، این view رو باز نمیکنه بلکه میخواد فایل json رو دانلود کنه !

ali_md110
جمعه 18 اسفند 1396, 18:48 عصر
اکشن بدینصورت بنویسید


public virtual ActionResult Section(int id)
{

var cc = (from a in db.Tbl_Category join b in db.Tbl_User on a.Username equals b.Username

join c in db.Tbl_Section on a.Category_ID equals c.Category_ID
where b.Username.Equals(u) && c.Category_ID.Equals(ID)
select c).ToList();



return Json(cc, JsonRequestBehavior.AllowGet);

}


این هم از سمت کلاینت شما


function GetSession(id) {

$.ajax({
cache: false,
url: "@Url.Action("Section", "نام کنترولر ")",
dataType: "json",
contentType: 'application/json; charset=utf-8',
type: 'GET',
data: { id: id },
success: function (data) {
$.each(data,
function (index, item) {

//دسترسی به مقادیر سمت کنترولر شما مثل نام کاربری
var m = item.Username;
});




},

error: function (xhr, ajaxOptions, thrownError) {
alert('Failed to retrieve states.');

}
});
}


کافیه این متد را صدا بزنید و توی حلقه ی این متد از داده های ارسالی استفاده کنید مثلا در یک dropdown نمایش بدید

ali_md110
جمعه 18 اسفند 1396, 18:49 عصر
اکشن بدینصورت بنویسید


public virtual ActionResult Section(int id)
{

var cc = (from a in db.Tbl_Category join b in db.Tbl_User on a.Username equals b.Username

join c in db.Tbl_Section on a.Category_ID equals c.Category_ID
where b.Username.Equals(u) && c.Category_ID.Equals(ID)
select c).ToList();



return Json(cc, JsonRequestBehavior.AllowGet);

}


این هم از سمت کلاینت شما


function GetSession(id) {

$.ajax({
cache: false,
url: "@Url.Action("Section", "نام کنترولر ")",
dataType: "json",
contentType: 'application/json; charset=utf-8',
type: 'GET',
data: { id: id },
success: function (data) {
$.each(data,
function (index, item) {

//دسترسی به مقادیر سمت کنترولر شما مثل نام کاربری
var m = item.Username;
});




},

error: function (xhr, ajaxOptions, thrownError) {
alert('Failed to retrieve states.');

}
});
}


کافیه این متد را صدا بزنید و توی حلقه ی این متد از داده های ارسالی استفاده کنید مثلا در یک dropdown نمایش بدید

phpphp7
جمعه 18 اسفند 1396, 18:55 عصر
سلام و متشکرم

موقع اجرا ، این ارور رو داد :




A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Tbl_Category_84 A0814D4A649989BAD1DC0D56A083CFE4A4E7120E81897CC63C DDBBFD68D899'.

ali_md110
جمعه 18 اسفند 1396, 20:54 عصر
این خطا مربوط به کوئری شما و Json Serialization میشود
چند راه حل:
بکارگیری Projection که یا از Automapper میتونید استفاده کنید
یا Select ساده دیگه بعد از کوئری بر روی لیست واکشی شده انجام بدید
یا json.net از این آدرس نصب کنید و تنظیمات زیر را اعمال کنید


Settings =
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
Formatting = Formatting.Indented,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
}

https://www.nuget.org/packages/Newtonsoft.Json

(https://www.nuget.org/packages/Newtonsoft.Json)