表单提交未达到控制器方法

时间:2015-03-09 17:52:16

标签: javascript asp.net .net asp.net-mvc

我正在使用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浏览器中重现

1 个答案:

答案 0 :(得分:0)

如果这是作为POST完成的,你需要用。修饰方法 像这样的HttpPost属性:

[HttpPost]
public ActionResult LoadAttachment()
{
...
}

如果您发现自己没有在Request.Form中获取值,那么您始终可以尝试使用FormCollection作为方法中的参数,然后使用字符串索引来检索字段的值。

[HttpPost]
public ActionResult LoadAttachment(FormCollection formCollection)
{
    string name = formCollection["Name"];
}

大脑食物

Some best Practices for MVC

Securing your MVC4 App Article