在一个MVC 4项目中,我们有很多Pages.cshtml接收模型集合(通常是数百行),我们通过
序列化为JSON@Html.Raw(Json.Encode(Model));
问题是在某些页面上我们收到异常(字符串的长度超过了maxJsonLength 上设置的值)。
我们知道是什么原因以及如何解决它。问题是我想创建一个类似的Json.Encode()
方法(使用Json.Net),因此我们不需要修改所有cshtml
页面。如果我创建Json.Encode()
方法,Razor会抱怨My.Namespace.Json
和System.Web.Helpers.Json
之间的模糊引用。
同样,我们知道如何通过在页面上添加别名来解决这个问题:
@using Json = My.Alias.Json
我尝试做的是透明地指示Razor为使用此cshtml
的所有Json.Encode
页面选择此别名。原因是我希望它是透明的,所以稍后如果有人添加新页面,他将自动开始使用我们的自定义JSON实现。
我认为在Views/Web.config
你可以为Razor添加命名空间和一些配置,但我不知道如何明确设置别名。
答案 0 :(得分:1)
有趣的问题,但据我所知,这是不可能的。参见例如这个:C#: Globally alias a generic class name?
作为替代方案,您可以创建一个辅助方法Html.JsonEncode()
并教导,训练或诱使每个人使用它。
如果您同时进行Raw()
来电并返回IHtmlString
,那么您可以@Html.JsonEncode(Model)
而不是@Html.Raw(Html.JsonEncode(Model))
,而在您知道之前每个人都是粉丝你的新方法。