我正在使用form.submit()从ASP.NET MVC(3)站点下载文件。 大多数时候它工作得很好,但在某些用例中(总是相同的)它甚至无法到达控制器。
以下是基本的javascript代码:
var url = "/Correspondence/LoadAttachment/";
var form = $('<form id="RemoveMe" action="' + url + '" method="post" style="display: none;"></form>');
var referenceId = Case.CurrentCase.CaseReferenceId.ReferenceId;
var username = Case.CurrentCase.CustomerData.CorrespondenceData.Username;
var caseId = Case.CurrentCase.Id;
var token = new Date().getTime();
var fileDownloadCheckTimer;
form.append('<input name="mailId" value="' + mid + '" />');
form.append('<input name="fileName" value="' + fileName + '" />');
form.append('<input name="username" value="' + username + '" />');
form.append('<input name="caseId" value="' + caseId + '" />');
form.append('<input type="hidden" name="downloadToken" value="' + token + '" />');
form.submit();
这是基本的控制器代码:
[ValidateInput(false)]
public ActionResult LoadAttachment()
{
try
{
uint mailId;
UInt32.TryParse(Request.Form["mailId"], out mailId);
...
return new FileContentResult(attachment.BinaryContent, attachment.ContentType)
{
FileDownloadName = attachment.Filename
};
}
catch (Exception ex)
{
Logger.LogErrorMessage(() => ex.ToString());
return Json("");
}
}
现在,即使我在失败的用例中对一个用例的表单中使用相同的值,它仍然会失败。所以问题必定在其他地方。但我无法弄清楚我的生活在哪里......
B.T.W,问题在Chrome和FireFox浏览器中重现
答案 0 :(得分:0)
如果这是作为POST完成的,你需要用。修饰方法 像这样的HttpPost属性:
[HttpPost]
public ActionResult LoadAttachment()
{
...
}
如果您发现自己没有在Request.Form中获取值,那么您始终可以尝试使用FormCollection作为方法中的参数,然后使用字符串索引来检索字段的值。
[HttpPost]
public ActionResult LoadAttachment(FormCollection formCollection)
{
string name = formCollection["Name"];
}
大脑食物