客户有一份重量为1.63 MB的pdf通讯,所以不是很大.
我们发送一封电子邮件,其中包含指向pdf的链接.或者用户在网站的主页上找到链接.没关系.
问题是,当用户请求PDF时,浏览器有时会进行深度冻结.即,您需要使用任务管理器来终止浏览器实例.
你可以在这里测试pdf: 时事通讯
让它变得困难的是它并不总是失败.以下是我在哪里以及我尝试过的内容的摘要.
BROWSERS
使用pdf失败的最可能的浏览器是Google Chrome.但是,IE有时也会冻结.
错误
谷歌浏览器有时会返回以下错误(经过漫长的等待):
"处理页面时出错.出现文件I/O错误.文件连接超时."
IE只是在没有呜咽的情况下冻死了.
ACROBAT版本
该文件最初由设计工作室在Adobe InDesign CS3中创建.我们刚收到pdf.我尝试使用Acrobat 7重新保存文件,以防出现兼容性问题.这似乎在一台机器上清除了问题,但在其他机器上却没有......
谷歌的结果
谷歌搜索显示Chrome和PDF存在一些问题.我还没有找到任何解决方案.这仍然无法解释为什么IE有时失败.
其他措施
我在测试之间清除每个浏览器的缓存.所以它不能只是一个错误的下载.
用ACROBAT PRO打开文件
以这种方式打开文件没有问题.
网络服务器
Web服务器人员已经测试了该文件并且没有任何问题.他们可以在日志中找不到任何问题,这表明文件已下载,并且问题发生在浏览器中.
救命!
该通讯本应该在两天前发布,但我们正在试图解决这个问题.坏消息是我已经没有想法了.
编辑:
解决方法:
我跟进了pestaa的建议(见下面的答案),它提供了一个有效的解决方法.对于用户类型(脑炎的医疗慈善机构,可能让患者留下脑损伤)不是最佳的,但它有效.即,附上以下http标头:
Content-Disposition: attachment
Run Code Online (Sandbox Code Playgroud)
为此,我创建了一个页面,其中包含一个包含以下代码的按钮:
protected void downloadButton_Click(object sender, EventArgs e)
{
string fileName = "newsletter49.pdf";
string filePath = Server.MapPath("~/images/ipdf/mailings/" + fileName);
Response.Clear();
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Response.ContentType = "application/octet-stream";
Response.WriteFile(filePath);
Response.Flush();
Response.End();
}
Run Code Online (Sandbox Code Playgroud)
页面的html(包括按W3C标准要求下载Acrobat Reader的按钮):
<h2>
Our Autumn/Winter 2010 Newsletter is now available</h2>
<p>
Please …
Run Code Online (Sandbox Code Playgroud) 我的存储库中抛出了一系列非常奇怪的错误.未找到或更改行,2个更新中的1个失败...没有任何意义.
好像我的DataContext实例正在被缓存......没有任何意义,我正在考虑职业生涯.
然后我注意到使用Ninject使用依赖注入传递了DataContext实例(这是我第一次使用DI ...).我撕掉了依赖注入,一切都恢复了正常.即刻.
所以依赖注入是个问题,但我仍然不知道为什么.我猜测Ninject正在缓存注入的DataContext.
它是否正确?
Ninject绑定如下:
Bind<IPupilBlockService>().To<SqlPupilBlockService>()
.WithConstructorArgument("db", new dbDataContext());
Run Code Online (Sandbox Code Playgroud) 假设我想为页面标题上方的每个页面添加不同的主图像.此外,我需要在左侧栏中放置页面特定的图像,并在右侧栏中放置页面特定的文本.在左右栏中,我还想要特定于图层的内容.
我不知道如何在不为网站中的每个页面创建一个图层的情况下实现这一目标,但最终我得到了大量的图层,这些图层只能提供一个看起来过于复杂的页面.
我错过了什么?
如果有一种方法可以使用内容部分进行此操作,那么如果您可以指导我阅读教程,博客,视频以帮助我解决问题,那就太棒了.
注意:
Sitefinity做得很好,但是我发现Orchard更容易创建模块,而且事实上它是MVC,我发现它更容易.
果园是免费的,我理解(并欣赏).只是希望随着产品的发展这种事情会更容易吗?
换句话说,我希望世界上最好的......
我正在编写电子学习包的管理实用程序.使用此实用程序,教师可以编写他们的课程,添加/上传图像等.
我的问题是关于上传文件时的安全漏洞,特别是图像文件.
以下代码是我上传新图像文件的POST的控制器代码:
[HttpPost]
public virtual ActionResult StepImage(int CourseId, int StepOrder, HttpPostedFileBase file)
{
service.CourseId = CourseId;
service.StepOrder = StepOrder;
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var fileExtension = Path.GetExtension(fileName);
if ((fileExtension == ".jpg") || (fileExtension == ".gif") || (fileExtension == ".png"))
{
service.StoreImageFileName(fileName);
var path = Server.MapPath("~/[path to where images are uploaded]/" + service.CourseId + "/");
if(!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
file.SaveAs(path + fileName);
}
else
{
// Refactor notice : Validation for invalid file extension …
Run Code Online (Sandbox Code Playgroud) 我正在采用我的第一个摇摇欲坠的步骤,使用jQuery提交Html表单.一切运作良好,但想使用T4MVC生成动作链接.
这适用于Html.BeginForm(和Ajax.BeginForm),因为它们将ActionResult作为生成参数的动作.即:
有办法吗?
<form method="POST" action="@MVC.???">
Run Code Online (Sandbox Code Playgroud)
我想我能做到:
@using (Html.BeginForm(MVC.MyArea.MyController.MyAction(),...,new {@id="myForm"}))
{
// Inputs
}
Run Code Online (Sandbox Code Playgroud)
但真的很奇怪T4MVC是否可以解决这个问题.怀疑不是,但我是新手,所以也许我错过了什么?
(是的,我知道Ajax.BeginForm,但我正在使用当前项目来了解有关MVC和jQuery的更多信息).
在自定义ContentPart的模块中,如何将字段设置为文本字段?
在我的migrations.cs类中,我创建了该部分的表:
public int UpdateFrom1()
{
SchemaBuilder.CreateTable("RightContentPartRecord", table =>
table.ContentPartRecord()
.Column<string>("Html"));
return 2;
}
Run Code Online (Sandbox Code Playgroud)
所以,我有一个名为Html的专栏.我想使用WYSIWYG编辑器,所以我被告知我需要一个Text字段来让它"开箱即用".
但是,这不适合我,所以我需要做什么才能将名为Html的列转换为部件上的文本字段?
如何配置它以使用WYSIWYG编辑器?
我已经将ASP.NET MVC 3中的应用程序更新为ASP.NET MVC 4.
该应用程序在MVC 3中运行良好.唯一不适用于MVC 4的是Ajax.Begin形式:表单默认为完整页面请求,而不是异步AJAX请求.
从本质上讲,它是我写的一个向导,但这是无关紧要的.Model.Step.ActionName正确返回一个字符串(参见下面的代码).
视图中的代码是:
@{
using (Ajax.BeginForm(Model.Step.ActionName, null, new AjaxOptions { UpdateTargetId = "wizardStep", OnBegin="isValid", LoadingElementId="PleaseWait", OnSuccess="SetFocusOnForm" },
new {@name="wizardForm", @id="wizardForm" } ))
{
//form contents
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到MVC 4中的Ajax.BeginForm使用HTML 5.我展示了MVC 3和MVC 4如何呈现下面的表单之间的区别:
MVC 3:
<form action="/Solicitors/Company/New/YourDetails" id="wizardForm" method="post" name="wizardForm" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'PleaseWait', updateTargetId: 'wizardStep', onBegin: Function.createDelegate(this, isValid), onSuccess: Function.createDelegate(this, SetFocusOnForm) });">
// form contents
</form>
Run Code Online (Sandbox Code Playgroud)
MVC 4:
<form action="/Solicitors/Company/New/LoginDetails" data-ajax="true" data-ajax-begin="isValid" data-ajax-loading="#PleaseWait" …
Run Code Online (Sandbox Code Playgroud) 有一个愚蠢的一天.
我有以下代码:
UserRoles = Roles.GetRolesForUser(username);
Run Code Online (Sandbox Code Playgroud)
如果username是一个空字符串("",用户未登录),那么当我检查UserRoles
即时窗口中的值时,它显示:
{string[0]}
Run Code Online (Sandbox Code Playgroud)
什么是{string[0]}
?
如何复制此值以测试我的代码是否存在用户未登录的情况(用户名=="")?
注意:我已经谷歌搜索但无济于事.
我有一个Silverlight可点击地图和一个下拉的滑动面板(jquery).尽管该面板具有较高的z-index,但它仍然落后于silverlight app.
你可以在这里看到: 行动中的问题......
要激活滑动面板,请单击窗口左上角的"翻译".
反正让这样的"滑动面板"掩盖了我的Silverlight应用程序吗?
我为WebFormViewEngine视图编写了一个非常漂亮的菜单Html帮助器.这个引擎允许你的助手返回void,仍然可以使用:
@Html.Theseus
Run Code Online (Sandbox Code Playgroud)
这对我的助手很有用,因为它可以使用HtmlTextWriter渲染菜单,直接渲染到输出流.
但是,在Razor视图中,Html助手应该返回一个值(通常是MvcHtmlString),这是添加到输出中的值.差异小,后果大.
有一种解决方法,正如GvS指出的那样(参见ASP.NET MVC 2到MVC 3:Razor中的自定义Html助手)如下:
如果帮助程序返回void,请执行以下操作:
@{Html.Theseus;}
Run Code Online (Sandbox Code Playgroud)
(基本上,您只是调用方法,而不是渲染到视图中).
虽然仍然很整洁,但这与@ Html.seus不完全相同.所以...
我的代码很复杂,但效果很好,所以不愿意进行主要编辑,即用另一个编写器替换HtmlTextWriter.一段代码如下:
writer.AddAttribute(HtmlTextWriterAttribute.Href, n.Url);
writer.AddAttribute(HtmlTextWriterAttribute.Title, n.Description);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.WriteEncodedText(n.Title);
writer.RenderEndTag();
// Recursion, if any
// Snip off the recursion at this level if specified by depth
// Use a negative value for depth if you want to render the entire sitemap from the starting node
if ((currentDepth < depth) || (depth < 0))
{
if (hasChildNodes)
{
// Recursive building starts here
// Open new ul …
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×3
jquery ×2
orchardcms ×2
ajax ×1
arrays ×1
browser ×1
c# ×1
datacontext ×1
download ×1
file-upload ×1
html-helper ×1
html5 ×1
lifecycle ×1
ninject ×1
pdf ×1
razor ×1
security ×1
silverlight ×1
t4mvc ×1