小编may*_*yor的帖子

字符串字段长度限制和换行符

我的情景似乎很常见,但到目前为止我还没有找到好的解决方案.因此,ASP.NET-MVC应用程序与MSSQL数据库位于后端.该模型包括带有字符串字段描述的A类,需要限制为100个字符.它声明如下:

    [StringLength(100)]
    public virtual string Description { get; set; }
Run Code Online (Sandbox Code Playgroud)

数据库中的相应列是nvarchar,列长度​​= 100.在UI中,Description字段由textarea表示,maxlength = 100.

现在问题来自textarea中的换行符.它们在客户端被解释为1个字符,但在服务器端它们由Environment.NewLine表示,它是2个字符(\ r \n).所以它超过了数据库列的长度(实际上服务器端验证在整个后端之前失败了,但为了简单起见,我们省略了验证).

我到目前为止找到的解决方案是:

  1. 在客户端添加一些魔法,以便将textarea中的换行符解释为两个字符.我不喜欢这种解决方案,因为它会让用户感到困惑.
  2. 将\ r \n替换为服务器端的\n.看起来像一个可能有一些副作用的黑客.
  3. 删除/增加数据库中的列长度.最简单的(不考虑服务器端验证问题),但让我们说并非如此.

我想除了这三个之外还应该有别的东西.

c# asp.net-mvc

11
推荐指数
1
解决办法
619
查看次数

HTTP Handler和SetValidUntilExpires中的输出缓存

我通过以下方式在自定义HTTP处理程序中使用输出缓存:

    public void ProcessRequest(HttpContext context)
    {
        TimeSpan freshness = new TimeSpan(0, 0, 0, 60);
        context.Response.Cache.SetExpires(DateTime.Now.Add(freshness));
        context.Response.Cache.SetMaxAge(freshness);
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.Cache.SetValidUntilExpires(true);
        ...
    }
Run Code Online (Sandbox Code Playgroud)

它可以工作,但问题是用F5刷新页面导致页面重新生成(而不是缓存使用),尽管最后一个代码行:

context.Response.Cache.SetValidUntilExpires(true);
Run Code Online (Sandbox Code Playgroud)

有什么建议?

UPD:似乎问题的原因是HTTP处理程序响应不在服务器上缓存.以下代码适用于Web表单,但不适用于处理程序:

        Response.Cache.SetCacheability(HttpCacheability.Server);
Run Code Online (Sandbox Code Playgroud)

是否有一些在服务器上缓存http处理程序响应的细节?

.net asp.net caching outputcache

7
推荐指数
1
解决办法
6170
查看次数

标签 统计

.net ×1

asp.net ×1

asp.net-mvc ×1

c# ×1

caching ×1

outputcache ×1