使用Adobe Reader X(版本10.0.*)在Internet Explorer(v 6,7,8,9)中打开PDF存在一个已知问题.浏览器窗口加载一个空的灰色屏幕(甚至没有Reader工具栏).它适用于Firefox,Chrome或Adobe Reader 10.1.*.
我发现了几个解决方法.例如,点击"刷新"将正确加载文档.升级到Adobe Reader 10.1.*,或降级到9.*,也解决了这个问题.
但是,所有这些解决方案都要求用户弄明白.我的大多数用户在看到这个灰色屏幕时非常困惑,最终指责PDF文件并指责网站被破坏.老实说,在我研究这个问题之前,我也责备了PDF!
所以,我试图找到一种方法来解决我的用户的这个问题.
我考虑过提供一个"下载PDF"链接(将Content-Disposition
标题设置为attachment
而不是inline
),但我的公司根本不喜欢这个解决方案,因为我们真的希望这些PDF文件能够在浏览器中显示.
我真的希望找到一个与最终用户无缝的解决方案,因为我不能依赖它们来了解如何更改其Adobe Reader设置,或者自动安装更新.
这是可怕的灰色屏幕:
编辑:截图已从文件服务器中删除!抱歉!
该图像是一个浏览器窗口,带有常规工具栏,但是背景为灰色背景,没有任何UI.
背景信息:
虽然我不认为以下信息与我的问题有关,但我会将其包含在内以供参考:
这是一个ASP.NET MVC应用程序,并且提供了jQuery.
PDF文件的链接已target=_blank
在新窗口中打开.
PDF文件正在即时生成,并且所有内容标题都已正确设置.URL不包含.pdf
扩展名,但我们会content-disposition
使用有效的.pdf
文件名和inline
设置来设置标头.
编辑:这是我用来提供PDF文件的源代码.
首先,控制器行动:
public ActionResult ComplianceCertificate(int id){
byte[] pdfBytes = ComplianceBusiness.GetCertificate(id);
return new PdfResult(pdfBytes, false, "Compliance Certificate {0}.pdf", id);
}
Run Code Online (Sandbox Code Playgroud)
这是ActionResult(PdfResult
,继承System.Web.Mvc.FileContentResult
):
using System.Net.Mime;
using System.Web.Mvc;
/// <summary>
/// …
Run Code Online (Sandbox Code Playgroud) 我有一个带有两个密码字段的典型注册表单.
<form>
<%= Html.TextBox("Email", null) %>
<%= Html.Password("password", null) %>
<%= Html.Password("confirmPassword", null) %>
<input type='submit' />
</form>
Run Code Online (Sandbox Code Playgroud)
如果表单未通过验证并重新显示,则文本字段将保留其值,但密码字段始终为空.
为什么密码字段不能保留其值? 更重要的是,我有什么理由不应该覆盖这种行为吗?
我觉得这种行为会降低可用性,并且更喜欢密码字段的行为方式与文本框字段相同 - 在验证错误存在时保留输入的值.
我正在使用ASP.NET MVC,但这个问题更多地涉及可用性和安全性.我明白我所看到的是预期的行为,并且看一下这个Password(...)
方法就会明白我明确地忽略了它的价值ModelState
.
在单步执行使用jQuery的脚本时,我只想测试我编写的代码.我不想进入jQuery文件 - 我不是在调试jQuery,只是我自己的文件.
有没有办法告诉调试器不要进入jQuery文件?我使用Visual Studio + Internet Explorer以及Firefox + Firebug来逐步执行代码......两者似乎都喜欢介绍几十个jQuery语句.
例如,假设我有一个这样的脚本:
$("div").each(function() {
$(this).hide();
});
Run Code Online (Sandbox Code Playgroud)
这在技术上是单个语句 - 因此"Step Over"将立即执行所有代码,这将跳过内部"hide"语句.但是,"Step Into"会将我带到jQuery代码,在将它带到"hide"语句之前,我必须先执行几十行代码.
我想让调试器完全忽略jQuery代码,所以我可以轻松地单步执行自己的代码,而不是单步执行jQuery代码.
在C#中,可以通过在类上使用[DebuggerStepThrough()]属性来实现.但这对JavaScript没有帮助.
我创建了一个叉textchange
jQuery插件,它使用jQuery.event.special
API来创建自己的自定义事件(textchange
,hastext
,和notext
).
我要疯了试图找到文档的$.event.special
API!我搜索了jQuery的网站,发现没有提到special
功能.我发现有几个博客谈论API,甚至引用了它的链接,但该页面根本没有谈论它.
有人可以指点我这个"特殊"API的一些文档吗?我主要对jQuery的文档感兴趣,因为我想知道这个API的"官方"来源.
我查看了jQuery的源代码,他们将$.event.special
API用于某些事件(包括ready
和hover
),所以它显然不像我之前想象的那样过时.
我有一个main
数据库和report
数据库,我需要从同步表main
成report
.
但是,当一个项目在main
数据库中被删除时,我只想IsDeleted
在report
数据库中设置一个标志.
这样做的优雅方式是什么?
我目前正在使用MERGE语句,如下所示:
MERGE INTO report.TEST target
USING (SELECT * FROM main.TEST) source
ON (target.ID = source.ID)
WHEN MATCHED THEN
UPDATE SET (target... = source...)
WHEN NOT MATCHED THEN
INSERT (...) VALUES (source...)
;
Run Code Online (Sandbox Code Playgroud)
该WHEN NOT MATCHED
语句为我提供了所有新值main
,但我也希望更新所有OLD值report
.
我正在使用Oracle PL/SQL.
我一直在研究一个动态的问答系统,但是我在为这个系统创建一个高效灵活的设计时遇到了麻烦.我很想知道是否有既定的设计模式或任何设计该系统的建议.
我有一系列问题.在回答之后,将显示另一组问题,具体取决于前一组的答案.这个重复,直到不再需要问题为止.
问题的答案都是布尔值,多项选择或数字.
重要的是,大多数问题仅在满足一组特定标准时显示,并基于之前的答案.
我需要标准来支持主要的布尔逻辑,例如And,Or,Not,Equals,Greater Than和Less Than.
举例来说,假设我已经收到答案的问题,如Age
,Gender
和State
.
接下来的问题之一是In School?
,但只有在以下情况下才能显示:Age < 30 AND Gender=Male AND (State = CA OR State = NY)
起初,我们只有3个初始问题,因此我们只使用3列来过滤第二组问题.
但是,我们的业务需求不断增长,我们开始需要更多初始问题,添加更多列,并在这些过滤器中添加更多逻辑.
这很快变得太僵硬和麻烦.
我们第二次尝试使系统更加灵活:将过滤逻辑存储为JavaScript,并运行JavaScript解释器来过滤结果.
这对于灵活性非常有效,但是从数据库中检索数千行并解释脚本的效率极低,并且对于生产执行效果太差.
我们最终将这两种方法结合起来,并提出了一些可行的方法.
我们首先根据几个硬编码的数据库列过滤我们的列表,然后使用JavaScript解释器进一步过滤列表.
这种混合系统仍有许多缺点:
我真的很想听听如何改进这种设计的建议.
我的数据库是MS SQL Server,后端是.NET C#,JavaScript解释器是JINT.UI实现并不重要,但它是一个支持AJAX的网站,用于询问和回答这些问题.
我一直在开发一个.NET字符串格式库来协助应用程序的本地化.它被称为SmartFormat,在GitHub上是开源的.
它试图解决的一个问题是语法数字.这也被称为"单数和复数形式"或"条件格式",这里有一个英文版的片段:
var message = "There {0:is|are} {0} {0:item|items} remaining";
// You can use the Smart.Format method just like using String.Format:
var output = Smart.Format(CultureInfo.CurrentUICulture, message, items.Count);
Run Code Online (Sandbox Code Playgroud)
我相信英国的规则是,有2种形式(单数和复数)可以应用于名词,动词和形容词.如果数量是1
单数,则使用,否则使用复数.
我现在正试图通过实施其他语言的正确规则来"开阔视野"!我已经明白,某些语言最多可以包含4种复数形式,并且需要一些逻辑来确定正确的形式.我想扩展我的代码以适应多种语言.例如,我听说俄语,波兰语和土耳其语的规则与英语完全不同,所以这可能是一个很好的起点.
但是,我只会说英语和西班牙语,那么如何确定许多常用语言的正确语法规则呢?
编辑:我也想知道我的单元测试的一些好的非英语"测试短语":什么是一些非常好的非英语短语,有单数和复数形式可用于测试国际化和本地化库?
我一直在研究.NET库来协助应用程序的国际化.它是用C#编写的,名为SmartFormat,在GitHub上是开源的.
它包含多种语言的语法数字规则,可根据模板和语言环境确定正确的单数/复数形式.规则是从Unicode语言复数规则获得的.
翻译具有依赖于数量的单词的短语(例如名词,动词和形容词)时,指定多个表单,格式化程序根据这些规则选择正确的表单.
英语示例:(注意语法几乎相同String.Format
)
var message = "There {0:is:are} {0} {0:item:items} remaining.";
var output = Smart.Format(culture, message, items.Count);
Run Code Online (Sandbox Code Playgroud)
我想为许多支持的语言编写单元测试.但是,我只会说英语和西班牙语(两者都有相同的语法编号规则).
有哪些优秀的非英语测试用语可以用于这些单元测试?
我正在寻找类似的短语"There {0:is:are} {0} {0:item:items} remaining."
.请注意此示例如何根据数量需要特定的动词和名词.
关于语法的说明:
此库查找:
分隔的单词,并根据为语言环境定义的规则选择正确的单词.例如,在波兰语中,"文件"一词有3种复数形式:1"plik",2-4"pliki",5-21"plików".因此,您将在格式字符串中指定所有3个表单:"{0} {0:plik:pliki:plików}"
.
这些单词通常按从最小可能值到最大值排序,例如"{0:zero:one:two:few:many:other}"
,由Unicode语言复数规则定义.
这里已经讨论了有关此代码的其他信息:单数/复数单词的本地化 - 语法数字的不同语言规则是什么?
我有一个应用程序,在执行后台任务时,显示一个进度条,其中包含"估计剩余时间"计算(例如"剩余5秒")和"估计完成时间"(例如"在12:59:59完成" "),或者我称之为ETA.
用于计算此ETA的算法基本上采用随时间推移的"滚动平均值":
1.每个进度事件被添加到具有当前时间的队列中.
2.在一定持续时间(例如10秒)之后,从队列中移除项目.
3. ETA是从队列中的第一个和最后一个项目推断出来的.
如果您关心,源代码可用:ETACalculator.cs
但是,存在抖动问题.随着每个进度事件被添加到计算中,ETA将稍微更新.让我们说ETA只是改变了0.1s
.这种小抖动很容易导致ETA"颤动".例如,我没有看到5s,4s,3s等的平滑进展,而是看到了5-5-5-4-5-4-5-4-4-4-4-4.
我只想把更新减少到每秒1次,但是进度条不太顺畅,而且我真的希望"实际"减速能够实时显示.
我遇到了一个简单的算法,可以减少这种跳跃的抖动.如何消除抖动?
我想知道是否存在任何工具来探索关系数据库中的数据,以及钻取主 - 细节关系.
我已经知道如何在单个表中查看数据,并且我知道如何构造JOIN表的SQL查询.但是,为了获得更深层次的N级,我必须编写一个SQL语句,找到我感兴趣的项目的ID,然后重复N次.结果可视化非常繁琐且难以实现.
但是,我想知道是否有一个工具可以让我查看表中的数据,如果有外键,让我展开数据以显示外来数据.希望能让我深入了解各个层面的细节.
有这样的工具吗?
我正在使用MS SQL,并使用SQL Server Management Studio来执行SQL.
c# ×5
.net ×3
javascript ×3
sql ×3
asp.net-mvc ×2
jquery ×2
localization ×2
adobe-reader ×1
firebug ×1
firefox ×1
html ×1
oracle ×1
passwords ×1
progress ×1
sql-merge ×1
sql-server ×1
ssms ×1
validation ×1