当前位置: 首页 > 面试题库 >

使用Ajax格式上传mvc3文件-Request.Files为空

凌鹏程
2023-03-14
问题内容

我正在使用mvc3,并尝试创建一系列ajax表单,每个表单都在一个页面内上载一个文件。这是页面的视图:

@{
    ViewBag.Title = "Index";
}
<h2>
    Index</h2>

    @Html.Partial("_UploadItem")
    @Html.Partial("_UploadItem")
    @Html.Partial("_UploadItem")

<script type="text/javascript">
    function Go() {
        // loop through form tags
        for (var n = 0; n < document.forms.length; n++) {
            var f = document.forms[n];
            // if a dress is chosen, a caption is chosen
            // and a file is chosen, then submit the ajax form
            if (f.dressid.value != '' &&
               f.dresscaption.value != '' &&
               f.fileitem.value != '')
                f.submit();
        }
    }
</script>
<input type="button" onclick="Go();"/>

然后,Go()函数遍历ajax表单,检查每个表单上的所有3个部分(dressid,dresscaption和fileitem)是否都是非空的,并且调用提交了做的表单,从而启动了异步上传。

这是局部视图:

@using SoRefeising.Models
@using (Ajax.BeginForm("UploadFile", new { }, new AjaxOptions { HttpMethod = "POST" }, new { enctype="multipart/form-data"}))
{
    List<SelectListItem> items = (List<SelectListItem>)ViewBag.Dresses;

    <span>Dress</span>
    @Html.DropDownList("dressid", items, "Choose Dress");
    <span>Caption</span>
    @Html.TextBox("dresscaption")
    <input type="file" id="fileitem" />    
}

我已经用multipart属性标记了每种形式。生成页面后,我得到以下信息:

<form action="/upload/UploadFile" data-ajax="true" data-ajax-method="POST" enctype="multipart/form-data" id="form0" method="post">    <span>Dress</span>
<select id="dressid" name="dressid"><option value="">Choose Dress</option>
<option value="1">Simpson01</option>
<option value="2">Simpson02</option>
</select>    <span>Caption</span>
<input id="dresscaption" name="dresscaption" type="text" value="" />    <input type="file" id="fileitem" />    
</form>

    <form action="/upload/UploadFile" data-ajax="true" data-ajax-method="POST" enctype="multipart/form-data" id="form1" method="post">    <span>Dress</span>
<select id="dressid" name="dressid"><option value="">Choose Dress</option>
<option value="1">Simpson01</option>
<option value="2">Simpson02</option>
</select>    <span>Caption</span>
<input id="dresscaption" name="dresscaption" type="text" value="" />    <input type="file" id="fileitem" />    
</form>

    <form action="/upload/UploadFile" data-ajax="true" data-ajax-method="POST" enctype="multipart/form-data" id="form2" method="post">    <span>Dress</span>
<select id="dressid" name="dressid"><option value="">Choose Dress</option>
<option value="1">Simpson01</option>
<option value="2">Simpson02</option>
</select>    <span>Caption</span>
<input id="dresscaption" name="dresscaption" type="text" value="" />    <input type="file" id="fileitem" />    
</form>

一切都很好…

这是所谓的控制器动作

[HttpPost]
        public ActionResult UploadFile(string dressid, string dresscaption)
        {
                HttpPostedFileBase hpf = Request.Files[0] as HttpPostedFileBase;
...

调用操作时,Request.Files集合具有0项,而不是选定的文件。我已启用不干扰JavaScript,不干扰文件已加载到母版页中,并且可以在其他页面上使用。

我已经在论坛上看到一些有关谨慎使用文件大小的消息。我正在测试的文件小于2k

有什么想法为什么Request.Files中没有项目?

谢谢


问题答案:

您无法使用AJAX上传文件。因此,请Ajax.BeginForm用普通的替换Html.BeginForm。您也可以查看以下博客文章。

如果要使用异步上传,则可以尝试一些可用的上传组件,例如Ajax Upload和Uploadify。



 类似资料:
  • 我想使用SpringMVC3上传文件并进行处理 但是它不起作用,我把< code>@RequestParam和< code>@ModelAttribute搞混了,所以请帮助我

  • 本文向大家介绍Django 解决上传文件时,request.FILES为空的问题,包括了Django 解决上传文件时,request.FILES为空的问题的使用技巧和注意事项,需要的朋友参考一下 用html的form上传文件时,request.FILES为空,没有收到上传来的文件,但是在request.POST里找到了上传的文件名(只是一个字符串)。 解决方法: 为form表单规定enctype属

  • 问题内容: 我想使用Ajax通过模式上传文件。我怎样才能做到这一点? 我的模态: 这是我的JavaScript文件: 这是我的控制器: 但它返回错误500。我认为Ajax不接受使用Bootstrap模式的文件上传。 问题答案: 您可以像这样通过ajax使用引导程序模式上载文件。 在表单标签中,使用属性enctype和html如下所示: js代码: 在您的控制器端,您可以执行以下功能来上传图像。

  • 问题内容: 嗨,我正在尝试使用此代码发送带有xmlhttprequest的文件。 但我收到此错误:请求被拒绝,因为未找到多部分边界,请帮助我。 问题答案: 没有这样的事情; 文件对象不应该以这种方式附加。 不发送文件。您必须使用对象将文件包装到post数据对象中: formData.append(“thefile”, file); xhr.send(formData); 之后,可以访问文件(如果您

  • 问题内容: 我知道有很多类似的问题,但是我仍然没有找到解决问题的方法。我正在尝试使用XMLHttpRequest上传文件,因此我开发了以下代码: PHP端脚本是: 但是var $ _FILES [‘file’]似乎为空,这意味着该文件未发送到服务器。然后,我决定在下面的代码中使用FormData对象 它可以正常工作,但文件大小只有8mb左右。当我尝试发送大小超过8mb的文件时,该var 再次变空

  • 问题内容: 我已经进行了很多搜索,以了解如何使用Ajax从表单上载文件,并发现xhr2应该可以做到。但是,我已经尝试过使用FormData对象,但它不起作用。 这是一个简单的html表单 这是“ post.php”文件,当以“老式”方式运行时,它可以正常工作: 这是“ upload.js” 您知道为什么它不起作用吗?控制台返回“未发送文件”。 非常感谢 ! 问题答案: 尝试替换代码: 有了这个: