我有一个asp.net页面,它将文件的内容发送到客户端,因此浏览器显示另存为对话框以下载文件.此页面以弹出窗口显示,当用户单击保存按钮时,它会自动关闭并开始下载.
在Windows Server 2003上,它工作正常.在与其他浏览器的Vista上,也可以正常工作.但是当我尝试使用IE7和Vista时,弹出窗口会打开,并在大约一秒后关闭而不显示文件下载对话框.我怎么解决这个问题?
我用于响应生成的代码是:
FileStream fileStream = new FileStream(filePath, FileMode.Open);
int fileSize = (int)fileStream.Length;
byte[] buffer = new byte[fileSize];
fileStream.Read(buffer, 0, (int)fileSize);
fileStream.Close();
Response.Clear();
Response.Buffer = true;
Response.BufferOutput = true;
Response.ContentType = "application / octet - stream";
Response.AddHeader("Content-Length", buffer.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Response.AddHeader("Extension", Path.GetExtension(filename));
Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
Run Code Online (Sandbox Code Playgroud)
我用这个javascript打开弹出窗口:
window.open ('Download.aspx?filename=somefile.ext','downloadWindow','location=0,status=0,scrollbars=0,width=1,height=1');
Run Code Online (Sandbox Code Playgroud)
编辑:我纠正了空格,但不幸的是他们不是问题.
编辑2 ::似乎这个问题与Vista无关,只与IE有关.我还发现,当项目在本地开发服务器上运行时,它工作正常,但是当连接到发布服务器时,它无法下载文件.
我的技术主管坚持这种例外机制:
try
{
DoSth();
}
catch (OurException)
{
throw;
}
catch (Exception ex)
{
Util.Log(ex.Message, "1242"); // 1242 is unique to this catch block
throw new OurException(ex);
}
Run Code Online (Sandbox Code Playgroud)
1242这里是catch方法的标识符,我们处理除OurException之外的异常.项目中的每个catch块都必须具有唯一标识符,以便我们通过查看日志来了解异常发生的位置.
对于每个方法,我们必须捕获OurException并抛出它.如果抛出其他类型的异常,我们必须在重新抛出之前记录它并通过OurException对其进行掩码.
这是一种合理的方法吗?如果有,有什么更好的选择?
编辑:我被告知堆栈跟踪在发布模式下不会产生有意义的结果.您是否建议捕获并抛出一般异常?
Edit2:谢谢大家.我用你的答案作为我反对此论点的一部分,但我被告知你没有足够的经验,也不知道如何应对现实生活中的情况.我必须走这条路.
我有一个像这样的ListView:
<ListView SelectionMode="Single" IsItemClickEnabled="True" ItemsSource="..." ItemClick="listView_ItemClick">
...
</ListView>
Run Code Online (Sandbox Code Playgroud)
显示此列表视图时,将选择第一个项目.
单击项目会触发listView_ItemClick.到目前为止,一切都很好.
问题是,第一项始终保持选中状态.即使我点击其他项目,它们也会触发点击事件,但它们不会被选中.如何在项目触发点击事件时获取项目并在用户点击或触摸它们时选择?
我正在使用表单身份验证.我的用户会被重定向到一个页面(写在web.config中),当他们登录,但他们中的一些可能没有访问此默认页面中的privilages.在这种情况下,我希望他们重定向到另一个页面,但RedirectFromLoginPage方法总是重定向到默认页面在web.config中.如何让用户登录,然后重定向到依赖于某些条件的页面?
我需要一些代码将标准C#TextBox转换为温度TextBox,这意味着在文本框中的文本末尾添加"°C",使用另一种颜色而不是默认颜色.
假设我有以下课程,我不允许改变:
public class C
{
public C() { CreateSideEffects(); }
public void M() { DoSomethingUseful(); }
}
Run Code Online (Sandbox Code Playgroud)
我必须在不调用构造函数的情况下调用M. 可能吗?
我有以下代码使用node.js将映像从ios设备上传到AWS S3:
var buf = new Buffer(req.body.image.replace(/^data:image\/\w+;base64,/, ""),'base64')
var s3bucket = new AWS.S3({params: {Bucket: 'forplay-static', Key: 'test.png'}});
s3bucket.putObject(buf, function(err, data) {
if (err) {
return res.send({ success: false, err: err });
} else {
return res.send({ success: true });
}
});
Run Code Online (Sandbox Code Playgroud)
我发布的图片是:http://pastebin.com/kcmXJbRd
这会在错误中返回以下错误:
{ "code": "UnexpectedParameter", "name": "UnexpectedParameter" }
Run Code Online (Sandbox Code Playgroud)
将base64图像上传到S3的正确方法是什么?
我有一个控制台应用程序.一个类(比如说Worker)在一个单独的线程中做一些工作,并在它完成时抛出一个事件.但这绝不会发生,因为执行立即结束.如何在线程抛出后等待线程完成并处理事件?
static void Main(string[] args)
{
Worker worker = new Worker();
worker.WorkCompleted += PostProcess;
worker.DoWork();
}
static void PostProcess(object sender, EventArgs e) { // Cannot see this happening }
Run Code Online (Sandbox Code Playgroud)
编辑:更正了语句的顺序,但这不是问题.
我使用Tidy来清理和制作符合HTML/XHTML的HTML文件.但是,输出包含非标准属性值,如:
<table id='abc'>...
Run Code Online (Sandbox Code Playgroud)
要么
<input type='button' />
Run Code Online (Sandbox Code Playgroud)
(看一下单引号).如何配置Tidy以提供严格的XHTML输出?先感谢您!