c# - ASP NET MVC RAZOR 上传多个图像文件列表

标签 c# asp.net asp.net-mvc asp.net-mvc-4 razor

我是 asp net 的新手,我有一个图像列表,我想通过 javascript 发送到 Controller 。

我正在使用 FileList,这是一个示例。 .创建.cshtml

<div class="form-group">
    @Html.LabelFor(model => model.description, "Escolha as Imagens", htmlAttributes: new { @class = "control-label col-md-2" })
    <input id="files" type="file" name="files[]" />
    <br>
    <div id="preview"></div>
</div>
@section Scripts{
    <script type="text/javascript">
        function handleFileSelect(evt) {

            var files = evt.target.files;
            var f = files[0];
            //kiem tra co fai file anh
            if (f.type.match('image.*')) {
                var reader = new FileReader();

                reader.onload = (function(theFile) {
                    return function(e) {
                        var span = document.createElement('span');
                        span.innerHTML = [
                            '<img class="thumb" src="', e.target.result, '" title="', escape(theFile.name),
                            '"/><span class="remove_img_preview"></span>'
                        ].join('');
                        document.getElementById('preview').insertBefore(span, null);
                    };
                })(f);

                reader.readAsDataURL(f);
            }
        }

        $('#files').change(function(evt) {
            handleFileSelect(evt);
        });
        $('#preview').on('click',
            '.remove_img_preview',
            function() {
                $(this).parent('span').remove();
            });

        $('#btnSave').click(function() {

            $.ajax({
                url: '/Dishes/Create',
                data: { files: files },
                type: "POST",
                cache: false,
                datatype: "html",
                success: function(data) {
                    console.log(data);
                },
                error: function(jqXhr, textStatus, errorThrown) {
                    //do your own thing
                    alert("fail");
                }
            });
        });

    </script>
}
</fieldset>
<div class="form-group">
    <div class="footer text-center">
        <button class="btn btn-fill btn-info" name="btnSave" id="btnSave">Inserir novo</button>
    </div>
</div>

Controller .cs

public ActionResult Create()
    {
        ViewBag.idTypeDish = new SelectList(db.TypeDish, "idTypeDish", "name");
        return View();
    }



    // POST: Dishes/Create
    [HttpPost]
    public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
    {


        return View();

    }

在 Controller 中,文件始终为空。 我正在使用这个例子,http://jsfiddle.net/Lwczca6p/1/ ,我只是适应我的项目。

最佳答案

您遇到了一些问题。首先,您尝试将 files 与 AJAX 结合使用,但该变量是在另一个函数的范围内定义的(即您无法在此处访问它)。其次,当使用jQuery的$.ajax进行文件上传时,需要将processData选项设置为false。我的处理方法如下:

$('#MyForm').on('submit', function (e) {
    e.preventDefault();
    var formData = new FormData(this); // `this` is the form instance
    $.ajax({
        url: '/path/to/handler',
        type: 'POST',
        data: formData,
        processData: false,
        contentType: 'multipart/form-data',
        success: function (data, textStatus, jqXHR) {
            // do something on success
        },
        error: function (jqXHR, textStatus, errorThrown) {
            // do something on error
        }
    });
});

关于c# - ASP NET MVC RAZOR 上传多个图像文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44391387/

相关文章:

c# - 如何在不加载表的所有数据的情况下计算事件和非事件统计信息?

c# - 上传文件时OutOfMemory

c# - 编写适当的正则表达式以允许数字和字母和数字的组合混合

c# - 如何在 ApplicationUserManager 上使用 Identity 2.2 并且不使用 ILookupNormalizer

asp.net-mvc - 在 MVC4 中路由带有扩展名的 url 将不起作用,尝试提供静态文件

javascript - 根网址javascript

c# - Entity Framework 5 性能问题

c# - C# 中的装箱和拆箱

c# - 在 C# 中使用 fitnesse、fitsharp 和 slim

c# - 在c#中检索xml文件中具有相同关键字的其他数据