小编Eri*_*rds的帖子

Twitter Bootstrap和ReCaptcha

我使用基本的Twitter Bootstrap .less文件作为ASP.NET MVC4网站的基本样式.我使用Microsoft.Web.Helpers.ReCaptcha类在注册页面添加了ReCaptcha.简化示例:

<head>
  <link rel="stylesheet/less" href="@Url.Content("~/scripts/less/style.less")" />
</head>

@ReCaptcha.GetHtml()
Run Code Online (Sandbox Code Playgroud)

结果如下:

混乱的ReCaptcha

如果我使用Chrome开发工具或firebug并删除twitter bootstrap,我会得到预期的ReCaptcha:

好的ReCaptcha

当然,这会破坏网站的所有其他样式,这是不可取的.有没有其他人经历过这个,有没有任何解决方案,除了手动更改引导类以添加ReCaptcha类的异常?

recaptcha asp.net-mvc-4 twitter-bootstrap

2
推荐指数
1
解决办法
2666
查看次数

避免使用默认构造函数和公共属性setter

我正在研究SignalR的一个项目,我有一些我将要通过它的对象.这些对象只在我的后端代码中显式创建,我真的希望能够对它们强制实现不变性和不变量.我遇到了SignalR要求我(好吧,实际上是NewtonSoft.Json)的问题,在我的属性上有一个默认的,无参数的构造函数和公共setter,以便它通过网络序列化和反序列化它们.

这是一个人为的例子:

public class Message{
    public string Text {get;set;}
    public int Awesomeness {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我想要的是,更多的是这些内容(它应该只有readonly私有字段和getter-only属性完全不可变,但对于只有POCO而没有方法的东西,足够好)

public class Message {
    public string Text {get;private set;}
    public int Awesomeness {get;private set;}
    public Message( string msg, int awesome){
        if (awesome < 1 || awesome > 5){
            throw new ArgumentOutOfRangeException("awesome");
        }
        Text = msg;
        Awesomeness = awesome;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,我的对象不能被SignalR .NET客户端库反序列化.我可以在那里查找一个默认构造函数,然后公开我的setter,但是我必须记住不要在我的代码中使用它们,并确保团队中没有其他人在不理解的情况下使用它们.

我已经开始尝试这样做,将默认构造函数标记为永远不应该显式使用的东西:

[Obsolete("Bad! don't do this!")
public Message(){}
Run Code Online (Sandbox Code Playgroud)

但是我不能仅仅在属性的setter上使用Obsolete属性.

如果我真的想要,我可以从DTO表示中分离出"真实"对象并在它们之间进行转换,但是我真的很兴奋写一堆样板来做这件事并引入另一层.

有什么我忽略的,或者我只需要咬紧牙关并处理它?

c# json.net signalr

2
推荐指数
1
解决办法
969
查看次数