PDA

View Full Version : مشکل در ارسال لیست فارسی به View با Json



HOSSEINONLINE7
چهارشنبه 09 مهر 1393, 08:37 صبح
سلام من از دیتابیس کوئری میگیرم و در قالب یک لیست با Json باید Return کنم . مشکل اینجاست که اگر کوئری مقادیرش کاراکتر انگلیسی باشن مشکلی نیست ولی اگر کاراکتر فارسی داشته باشه سمت کلاینت Result را دریافت نمیکنه و به خطا میره .

چکار کنم کاراکترهای Unicode هم پشتیبانی کنه ؟

amir-yeketaz
چهارشنبه 09 مهر 1393, 11:30 صبح
ربطی به فارسی یا انگلیسی بودن result نداره !

کدتون رو باید بذارید و خطا رو ...

HOSSEINONLINE7
چهارشنبه 09 مهر 1393, 12:13 عصر
ربطی به فارسی یا انگلیسی بودن result نداره !

کدتون رو باید بذارید و خطا رو ...

این کد سرچ ایجکسی هست که نوشتم و Key برای جستجو به کنترلر ارسال میشه . اونجا نتایج با json برمیگرده .

خوب اگر ربطی نداره چرا فقط موقعی که key حرف انگلیسی وارد میشه جواب میده ؟

وقتی Key فارسیه خطا نمیده ولی فقط موقعی که نتیجه Return میشه سمت کلاینت بجای رفتن به Success به Error میره.

public JsonResult Search(string key)
{
PostRepository blpost = new PostRepository();

var list = blpost.Where(x => x.Title.Contains(key)).ToList();

return Json(list);

}

-----------------------------------------------
$.ajax({
url: "/Home/Search",
dataType: "Json",
contentType: 'application/json; charset=utf-8',
type: "Post",
data: { key: str},
success: function (result) {
...
}

},
error: function () {
...
}

amir-yeketaz
چهارشنبه 09 مهر 1393, 12:24 عصر
حالت return را به مقدار زیر عوض کنید :

return Json(list, JsonRequestBehavior.AllowGet);

اگر بازم خطا داد ... خطا را در tools developer گوگل کروم یا فایرباگ کروم مشاهده کنید و آن را بگذارید.

HOSSEINONLINE7
چهارشنبه 09 مهر 1393, 15:45 عصر
حالت return را به مقدار زیر عوض کنید :

return Json(list, JsonRequestBehavior.AllowGet);

اگر بازم خطا داد ... خطا را در tools developer گوگل کروم یا فایرباگ کروم مشاهده کنید و آن را بگذارید.

با Firebug فایرفاکس این خطا را میده :

Invalid JSON primitive: key.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Invalid JSON primitive: key.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

amir-yeketaz
چهارشنبه 09 مهر 1393, 15:52 عصر
به این لینک ها نگاه کن :
http://stackoverflow.com/questions/22361067/mvc-5-invalid-json-primitive
http://stackoverflow.com/questions/2445874/invalid-json-primitive-in-ajax-processing

در کل دو چیز تو این لینک ها گفته میشه که باید ویرایش کنی :
در پارامترهای ورودی ajax این دو مورد رو به مقادیر زیر تغییر بده :

dataType: "json",
contentType: "application/json",

در پارامتر data داده ها رو به صورت JSON بفرس نه آبجکت جاوااسکریپت ... لذا آبجکت رو به JSON تبدیل کن

HOSSEINONLINE7
چهارشنبه 09 مهر 1393, 16:28 عصر
کدم را به شکل زیر تغییر دادم ولی بازم خطای قبلی را میده !

dataType: "json",
contentType: 'application/json',
type: "Post",
data: { key: JSON.stringify(str)},

alireza_s_84
چهارشنبه 09 مهر 1393, 18:44 عصر
با Firebug فایرفاکس این خطا را میده :

Invalid JSON primitive: key.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Invalid JSON primitive: key.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
طبق خطایی که شما گذاشتین این یک خطای سمت سرور هست. و داره به پارامتری ایراد میگیره که شما بصورت لیست به Json پاس دادین. ابتدا چک کنید که list شما null نباشه و بعد اقدام به ارسال اون بصورت پارامتر کنید.

HOSSEINONLINE7
چهارشنبه 09 مهر 1393, 21:58 عصر
طبق خطایی که شما گذاشتین این یک خطای سمت سرور هست. و داره به پارامتری ایراد میگیره که شما بصورت لیست به Json پاس دادین. ابتدا چک کنید که list شما null نباشه و بعد اقدام به ارسال اون بصورت پارامتر کنید.

بله میدونستم خطا سمت سرور رخ میده ولی دلیلش را متوجه نشدم . من یک لیست جنریک را میخواستم به view پاس بدم و همونطور که شما فرمودید چند تا از فیلدهاش Null بودن و من فکر نمیکردم مشکل از این باشه .

برای رفع مشکل یک لیست جنریک دیگه از فیلدهایی که نیاز داشتم ایجاد کردم و Return کردم حل شد ...

مرسی