在ASP.NET MVC视图中是否有用于转义JavaScript的实用程序函数?我经常需要使用视图中的一些值来初始化一小段JavaScript; 例如,我可能有类似的东西:
<script type="text/javascript">
var page = new Page({ currentUser: "<%= Model.UserName %>" });
page.init();
</script>
Run Code Online (Sandbox Code Playgroud)
我希望有类似的东西:
<script type="text/javascript">
var page = new Page({ currentUser: "<%= Html.JavaScriptEscape(Model.UserName) %>" });
page.init();
</script>
Run Code Online (Sandbox Code Playgroud)
当然,我可以自己编写这个函数.但是因为已经有内置的实用程序形成HTML编码,并且因为ASP.NET MVC的一个卖点是<%%>是默认的渲染模式,因为我想要实现的是很常见的,它让我想知道为什么我找不到已经内置的东西.例如,是否有一种简单而优雅的方法可以在视图中将对象序列化为JSON?
或者我正在做一些针对ASP.NET MVC原则的事情?当我遇到这样的问题时,通常会让我认为我做错了,因为我认为框架设计师花了一些时间思考现实场景.
Str*_*ior 49
在.NET 4中,HttpUtility类为各种上下文提供了各种静态编码方法,包括JavaScriptStringEncode用于此特定目的的方法.
但是,使用JSON反序列化通常更简单.
Sim*_*ine 10
在使用Razor模板的MVC 5中,以下是可能的:
<script type="text/javascript">
var page = new Page({ currentUser: @Html.Raw(Json.Encode(Model.UserName)) });
page.init();
</script>
Run Code Online (Sandbox Code Playgroud)
在ASP.NET MVC工作一段时间后,我得出结论(很可能)没有内置帮助器.当然,编写自己的东西是微不足道的.这是为了完整性:
using System.Web.Mvc;
using System.Web.Script.Serialization;
namespace MyProject.Helpers
{
public static class JsonExtensions
{
public static string Json(this HtmlHelper html, object obj)
{
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
return jsonSerializer.Serialize(obj);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中,它可以使用如下:
<script type="text/javascript">
var page = new Page(<%= Html.Json(new { currentUser: Model.UserName } ) %>);
page.init();
</script>
Run Code Online (Sandbox Code Playgroud)