我正在使用片段标识符为我的Web应用程序中的AJAX事件创建一个永久链接,类似于这个人.就像是:
http://www.myapp.com/calendar#filter:year/2010/month/5
Run Code Online (Sandbox Code Playgroud)
我做了很多搜索,但找不到片段识别符的有效字符列表.在W3C规范不提供任何内容.
我是否需要将字符编码与一般的URL相同?
在任何地方似乎都没有任何好的信息.
我花了很多时间搞清楚如何配置我的WCF服务,以便它们适用于生产环境中的https.
基本上,我需要这样做:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" bindingNamespace="https://secure.mydomain.com" binding="basicHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="HttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
Run Code Online (Sandbox Code Playgroud)
将bindingNamespace属性添加到端点是使其工作的最终因素.
但是这个配置在我在常规http下工作的本地开发环境中不起作用.所以我的配置是:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
这里的区别是我将httpsGetEnabled属性设置为false,并删除了bindingConfiguration和bindingNamespace.
问题是: …
我没有问,如果它.我知道事实并非如此.
我很好奇原因.我已经阅读了支持文档,例如关于在MySQL中使用Nulls的支持文档,但它们并没有给出任何理由.他们只重复你必须使用的"是空"的口头禅.
这一直困扰着我.在进行动态SQL(那些必须要做的极少数时间)时,将"null"传递给where子句会更容易:
@where = "where GroupId = null"
Run Code Online (Sandbox Code Playgroud)
这将是常规变量的简单替换.相反,我们必须使用if/else块来执行以下操作:
if @groupId is null then
@where = "where GroupId is null"
else
@where = "where GroupId = @groupId"
end
Run Code Online (Sandbox Code Playgroud)
在更大更复杂的查询中,这是一个巨大的痛苦.有没有特定的原因,SQL和所有主要的RDBMS供应商都不允许这样做?它会产生某种关键字冲突或价值冲突?
编辑:
许多答案的问题(在我看来)是每个人都在设置null和"我不知道它的值是什么"之间的等价.这两件事之间存在巨大差异.如果null意味着"有一个值,但它是未知的"我会100%同意空值不能相等.但SQL null并不意味着.这意味着没有价值.任何两个为null的SQL结果都没有值. 没有价值不等于未知价值.两件不同的事情.这是一个重要的区别.
编辑2:
我遇到的另一个问题是其他HLL允许null = null完全正常并适当地解决它.例如,在C#中,null = null返回true.
我只想要一个对象的第一个深度级别(我不想要任何孩子).我愿意使用任何可用的库.大多数库只会在达到递归深度时抛出异常,而不是仅仅忽略.如果这不可能,有没有办法忽略给定某种数据类型的某些成员的序列化?
编辑:假设我有一个像这样的对象:
class MyObject
{
String name = "Dan";
int age = 88;
List<Children> myChildren = ...(lots of children with lots of grandchildren);
}
Run Code Online (Sandbox Code Playgroud)
我想删除所有子(甚至复杂类型)以返回这样的对象:
class MyObject
{
String name = "Dan";
int age = 88;
List<Children> myChildren = null;
}
Run Code Online (Sandbox Code Playgroud) 这是我见过的最奇怪的错误之一.
我正在做一个非常简单的调用来从HttpRuntime缓存中返回值.电话是:
return HttpContext.Current.Cache[cacheKey];
Run Code Online (Sandbox Code Playgroud)
如果它返回null,那很好.我检查返回的值是否为null并相应地采取行动.我一直在使用这个电话.
最近,出于某种原因,当cacheKey设置为这个确切的值时:
"Topic_GridSelectAll:5,null,2010-08-31-20-00-00,Published,desc,5,1"
Run Code Online (Sandbox Code Playgroud)
抛出System.OverflowException:否定二进制补码数的最小值无效.
呼叫,相关代码或服务器没有任何变化.如果cacheKey的字符略有不同,那么它的工作原理非常好.例如,此cacheKey返回null而不抛出任何异常:
"Topic_GridSelectAll:5,null,2010-08-31-21-00-00,Published,desc,5,1"
Run Code Online (Sandbox Code Playgroud)
请注意,这两个字符串之间的唯一区别是时间字符:2010-08-31-20-00-00与2010-08-31-21-00-00.
为什么这会有什么不同呢?为什么现在这么久以后呢?
堆栈跟踪是:
[OverflowException: Negating the minimum value of a twos complement number is invalid.]
System.Math.AbsHelper(Int32 value) +12753486
System.Web.Caching.CacheMultiple.UpdateCache(CacheKey cacheKey, CacheEntry newEntry, Boolean replace, CacheItemRemovedReason removedReason, Object& valueOld) +142
System.Web.Caching.CacheInternal.DoGet(Boolean isPublic, String key, CacheGetOptions getOptions) +122
MyProject.Helpers.CacheHelper.GetData(String cacheDomain, String cacheKey) in ...
Run Code Online (Sandbox Code Playgroud)
我已经尝试更改缓存调用以使用HttpRuntime.Cache(即.HttpRuntime.Cache[cacheKey]),但这没有任何区别.我知道它是相同的底层缓存提供者,但我想也许不同的调用会产生影响.没有骰子.
这不起作用:
$("#elementId").attr("required", "true");
Run Code Online (Sandbox Code Playgroud)
在Chrome和Firefox中,DOM都会生成required属性(无值)或required=""(空值).
并且这个例子中的值是"真"并不重要.如果你尝试"asdf"同样的事情发生.
奇怪的是,我相信这曾经发挥作用,因为这个新代码是一个持续了好几年的大型项目的一部分.
我唯一能想到的是我的Chrome(v10)和Firefox(v4)现在都已经足够先进,他们将所需属性识别为HTML5保留关键字.我添加了novalidate属性,认为这可能会关闭任何与表单相关的HTML5.没有这样的运气.
思考?
编辑:
为了澄清,这只发生在JQuery上.如果我这样说,它有效:
$("#elementId")[0].setAttribute("required", "true");
Run Code Online (Sandbox Code Playgroud)
JQuery中有错误吗?知道为什么这只发生在JQuery上吗?我们的开发团队喜欢所有代码,尽可能通过JQuery.我可以使用直接的setAttribute JavaScript方法,但宁可使用可行的JQuery解决方案.
编辑2:
问题的症结在于......
为什么attr()在常规setAttribute()方法中使用JQuery的方法不起作用?该attr()方法setAttribute()在某些时候调用是否较低?
这就是令人困惑的事情.required="true"如果您使用setAttribute(),则Chrome和Firefox是完美的设置.
如果我的User表有几个可查询的字段(例如DepartmentId,GroupId,RoleId),如果我为这些字段的每个组合创建索引,它会产生任何速度差异吗?
通过"可查询",我指的是一个查询屏幕,最终用户可以通过从下拉列表中选择,根据部门,组或角色选择记录.
目前,我有一个关于DepartmentId,GroupId和RoleId的索引.这是每个字段的单个非唯一索引.
如果最终用户选择"B组中的任何人",则SQL看起来像:
select * from User where GroupId = 2
Run Code Online (Sandbox Code Playgroud)
拥有GroupId的索引应该加快速度.
但是如果最终用户选择"B组和角色C中的任何人",则SQL将如下所示:
select * from User where GroupId = 2 and RoleId = 3
Run Code Online (Sandbox Code Playgroud)
单独拥有GroupId和RoleId的索引可能没有任何区别,对吧?
为寻求更好的指标是,如果我有一个指数跨越两个 groupId和角色ID.
但如果是这样的话,那就意味着我需要为可查询字段的每个组合都有一个索引.所以我需要所有这些索引:
任何人都可以对此有所了解吗?我正在使用MySQL,如果这有所作为.
&符号是否应该在HTML属性中编码的唯一字符?
众所周知,这不会通过验证:
<a href="http://domain.com/search?q=whatever&lang=en"></a>
Run Code Online (Sandbox Code Playgroud)
因为&符号应该是&.这是验证失败的直接链接.
这个人列出了一堆应编码的字符,但他错了.如果你编码http://href中的第一个"/" 将无法正常工作.
在ASP.NET中,是否已经构建了一个帮助方法来处理这个问题?像Server.UrlEncode和HtmlEncode这样的东西显然不起作用 - 这些用于不同的目的.
我可以构建我自己的简单扩展方法(如.ToAttributeView()),它可以进行简单的字符串替换.
我有一个很大的错误消息列表,我的商业代码可以根据输入的内容返回.该列表最终可能超过一千.
我想直接枚举这些,使用[Description("")]属性来记录友好消息.
就像是:
public enum ErrorMessage
{
[Description("A first name is required for users.")]
User_FirstName_Required = 1,
[Description("The first name is too long. It cannot exceed 32 characters.")]
User_FirstName_Length = 2,
...
}
Run Code Online (Sandbox Code Playgroud)
我知道枚举是原始类型,特别是整数.这么多整数应该没有任何问题,对吧?
有什么我没想到的吗?这似乎应该没问题,但我想我应该先花时间这样做,然后再这样做.
当.Net有很多值时,它们是否会关注枚举类型?
更新
我不想使用Resources的原因是因为
a)我需要能够使用整数值引用每个唯一的错误消息.除了其他内容之外,biz层还为API提供服务,并且必须返回表示错误的整数值列表.我不相信Resources允许您使用整数来处理资源值.我错了吗?
b)没有本地化要求.
首先看起来容易的东西现在变成了一个脑筋急转弯.
我正在构建您在新闻/博客网站右侧边栏中看到的"评论最多"或"最通过电子邮件"列表中的一个.
该列表必须与最近的日期范围(比如最近7天)相关,因为您希望列表始终保持新鲜并包含较新的内容.否则,收到大量评论的少数文章将始终位于列表顶部.
例如,在我的情况下,该网站有一些文章,每篇文章有几百个评论,但其余的都少于20.所以如果"最多评论"列表被拉出这样:
select
ArticleId,
count(CommentId) as Comments
from
Comment
group by
ArticleId
order by
count(CommentId) desc
limit 10;
Run Code Online (Sandbox Code Playgroud)
然后,几篇有几百条评论的文章总是排在最前面.该列表永远不会改变.
所以我重新编写了select,包括过去7天:
select
ArticleId,
count(CommentId) as Comments
from
Comment
where
Created >= '2011-06-14'
group by
ArticleId
order by
count(CommentId) desc
limit 10;
Run Code Online (Sandbox Code Playgroud)
这看起来更好,但它仍然无法工作,因为它没有考虑过去7天内没有活动的情况.
如果在过去7天内没有发生任何事情(或只发生了一些评论),则该列表应包含此前的活动.底线 - 列表总是需要显示10篇文章.
我总是可以调用多个SQL语句,以7天的增量返回,直到我填写列表,但我不想这样做.我正在缓存进程内存中的结果,但我仍然希望尽可能只进行一次SQL调用.
思考?我觉得这很容易实现,我只是忽略了一个明显的地方.
如果在C#中的DateTime类型上使用增量运算符(++)会发生什么?
例如,如果我这样做:
DateTime blah = new DateTime(2010, 12, 24);
blah++;
Run Code Online (Sandbox Code Playgroud)
什么会变成什么?这会增加一个刻度还是一天?
或者这甚至是合法的?
我周围没有开发环境,也不会有几天,或者我会试着找出来.我太好奇不能等待,所以我想我会问社区.