PDA

View Full Version : قرار دادن تگهای html در json



sara_t
پنج شنبه 18 آذر 1395, 10:19 صبح
سلام دوستان

دوستان من میخام یه سری کدهای html رو در تگ html جیسون قرار بدم.اما تگها رو نمیخونه و عکس رو به من نشون نمیده.ممنون میشم راهنمایی کنید؟


return Json(new JsonData()
{
Success = true,
Script = MessageBox.Show("کالا به سبد خرید شما اضافه شد.", MessageType.Success).Script,
//Html = "<span>لیست خرید (" + CartCount() + ")</span>"
Html = " <div class='traz'><a id='CartItems' class='link' href='/home/basket'> <div class='numbershoppingcart'>" + CartCount() + "<img src='~/Content/img/basket.png' alt='سب خرید' class='shoppingcart' /></a></div>"

});

Moien Tajik
پنج شنبه 18 آذر 1395, 10:56 صبح
http://stackoverflow.com/a/19157781

sara_t
پنج شنبه 18 آذر 1395, 12:55 عصر
من متوجه راهکارشون نشدم.میشه یه مثال بزنین

Moien Tajik
پنج شنبه 18 آذر 1395, 13:23 عصر
اگر مشکلتون این هست که تگ ها فقط خونده نمیشه ، در ویو باید Raw کنیدش ، به این صورت :

<script>
var myObj = JSON.parse("@Html.Raw(Model.JsonString)");
</script>

sara_t
پنج شنبه 18 آذر 1395, 16:01 عصر
ممنون
من در کنتررلر یه متد دارم بنام ADDTOCART زمانیکه کالایی به سبد خریدم اضافه میشه. json رو فراخوانی میکنم که ثبت کالا رو نمایش میده تا اینجا مشکلی ندارم.بعد در تگ Html تابع json مقداری که به سبد اضاف شده رو نمایش میدم.اینجا میخام که عکس سبد یکبار رفرش بشه ولی چون دستورات html رو نمیتونم درست بنویسم اینکار انجام نمیشه
یعنی میخام این خط کد من اجرا بشه وعکس رو نمایش بده


Html = " <div class='traz'><a id='CartItems' class='link' href='/home/basket'> <div class='numbershoppingcart'>" + CartCount() + "<img src='~/Content/img/basket.png' alt='سب خرید' class='shoppingcart' /></a></div>"




عکس رو نشون نمیده اما تعداد رو درست رفرش میکنه مشکل من با اون تگ img هست که کار نمیکنه

Moien Tajik
پنج شنبه 18 آذر 1395, 23:35 عصر
عکس رو inspect elements کنید ، ببینید href اون به کجا هستش .
احتمالا آدرس عکس رو بدرستی پیدا نمیکنه ، اگر از اون بود آدرس رو به این صورت بدید : https://www.thorntech.com/2012/07/4-things-you-must-do-when-putting-html-in-json/

sara_t
دوشنبه 22 آذر 1395, 13:57 عصر
ممنون
با این 4 روش تگ img رو تشخیص نمیده.من هر کاری میکنم نمیتونم توی html یه تگ img رو نمایش بدم

وقتیکه inspect میگیرم میبینم تو حالت jason به ادرس عکس یه home اضافه میکنه به همین ذلیلیم هست که عکس رو نمیتونه نشون بده

Moien Tajik
دوشنبه 22 آذر 1395, 21:50 عصر
ممنون
با این 4 روش تگ img رو تشخیص نمیده.من هر کاری میکنم نمیتونم توی html یه تگ img رو نمایش بدم

وقتیکه inspect میگیرم میبینم تو حالت jason به ادرس عکس یه home اضافه میکنه به همین ذلیلیم هست که عکس رو نمیتونه نشون بده

آدرس رو بجای ~ بصورت دقیق بهش بدید .

alireza_s_84
دوشنبه 22 آذر 1395, 22:30 عصر
سلام دوستان

دوستان من میخام یه سری کدهای html رو در تگ html جیسون قرار بدم.اما تگها رو نمیخونه و عکس رو به من نشون نمیده.ممنون میشم راهنمایی کنید؟


return Json(new JsonData()
{
Success = true,
Script = MessageBox.Show("کالا به سبد خرید شما اضافه شد.", MessageType.Success).Script,
//Html = "<span>لیست خرید (" + CartCount() + ")</span>"
Html = " <div class='traz'><a id='CartItems' class='link' href='/home/basket'> <div class='numbershoppingcart'>" + CartCount() + "<img src='~/Content/img/basket.png' alt='سب خرید' class='shoppingcart' /></a></div>"

});

ابتدا قبل از اینکه از روش "غلط" الصاق رشته استفاده کنید. تولید HTML رو به View بسپارید و نتیجه اون View رو به رشته تبدیل و از طریق Json برگشت بدین.
برای تبدیل یک View به رشته میتونید یک متد الحاقی به شکل زیر به کنترلر اضافه کنید و در تمامی کنترلرها ازش استفاده کنید:

public static class ControllerExtensions
{
public static string RenderViewToString(this Controller controller, string viewName)
{
return RenderViewToString(controller, viewName, null, null);
}




public static string RenderViewToString(this Controller controller, string viewName, string master)
{
return RenderViewToString(controller, viewName, null, master);
}


public static string RenderViewToString(this Controller controller, string viewName, object model, string master = null)
{
try
{
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = (string.IsNullOrEmpty(master)) ? ViewEngines.Engines.FindPartialView(controller.Con trollerContext, viewName) :
ViewEngines.Engines.FindView(controller.Controller Context, viewName, master);


var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(controller.Contr ollerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}


return string.Empty;
}
}


نحوه استفاده:

var html = this.RenderViewToString("~/Views/Account/ConfirmEmailMsg.cshtml", model);


توی View شما از HtmlHelper ها میتونید استفاده کنید در نهایت این Html رو از طریق جیسون به مرورگر بفرستین.