如何强制一种方法对Razor模糊引用?

时间:2017-02-08 09:18:37

标签: asp.net-mvc asp.net-mvc-4 razor json.net

在一个MVC 4项目中,我们有很多Pages.cshtml接收模型集合(通常是数百行),我们通过

序列化为JSON
@Html.Raw(Json.Encode(Model));

问题是在某些页面上我们收到异常(字符串的长度超过了maxJsonLength 上设置的值)。

我们知道是什么原因以及如何解决它。问题是我想创建一个类似的Json.Encode()方法(使用Json.Net),因此我们不需要修改所有cshtml页面。如果我创建Json.Encode()方法,Razor会抱怨My.Namespace.JsonSystem.Web.Helpers.Json之间的模糊引用。

同样,我们知道如何通过在页面上添加别名来解决这个问题:

@using Json = My.Alias.Json

我尝试做的是透明地指示Razor为使用此cshtml的所有Json.Encode页面选择此别名。原因是我希望它是透明的,所以稍后如果有人添加新页面,他将自动开始使用我们的自定义JSON实现。

我认为在Views/Web.config你可以为Razor添加命名空间和一些配置,但我不知道如何明确设置别名。

1 个答案:

答案 0 :(得分:1)

有趣的问题,但据我所知,这是不可能的。参见例如这个:C#: Globally alias a generic class name?

作为替代方案,您可以创建一个辅助方法Html.JsonEncode()并教导,训练或诱使每个人使用它。

如果您同时进行Raw()来电并返回IHtmlString,那么您可以@Html.JsonEncode(Model)而不是@Html.Raw(Html.JsonEncode(Model)),而在您知道之前每个人都是粉丝你的新方法。