使用 onsubmit 属性时 request.files 返回 null

Posted

技术标签:

【中文标题】使用 onsubmit 属性时 request.files 返回 null【英文标题】:request.files returns null when using onsubmit attribute 【发布时间】:2021-03-02 22:58:35 【问题描述】:

Request.files 在将 onsubmit 属性添加到 BeginForm 后返回 null 并在删除后正常工作。我尝试使用 id 属性相同的问题。 我也尝试从控制器中的集合中添加

查看

@using (html.BeginForm("Create", "Candidate", FormMethod.Post, new  onsubmit = "return SubmitForm(this)",  enctype = "multipart /form-data" ))


    <div class="form-horizontal">
       ....
        <div class="form-group">
            @Html.Label("Avatar", new  @class = "control-label col-md-2" )
            <div class="col-md-10">
                <input type="file" name="file" multiple="multiple" />
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>

   
 function SubmitForm(form) 
            $.validator.unobtrusive.parse(form);
            if($(form).valid())
                $.ajax(
                    type : "POST",
                    url : form.action,
                    data : $(form).serialize(),
                    success : function (data) 
                        if(data.success)
                        
                            Popup.dialog('close');
                            dataTable.ajax.reload();

                            $.notify(data.message,
                                globalPosition :"top center",
                                className : "success"
                            )

                        
                    
                );
            
            return false;
        



actionResult Create(model model)


【问题讨论】:

我想你的问题已经在这里得到了回答***.com/questions/166221/… 【参考方案1】:

试试这个:

var form = $('form')[0];
var formData = new FormData(form);

    function SubmitForm(form) 
                $.validator.unobtrusive.parse(form);
                if($(form).valid())
                    $.ajax(
                        type : "POST",
                        url : "your url",
                        data : formData ,
                        contentType: false,
                        processData: false,
                        success : function (data) 
                            if(data.success)
                            
                                Popup.dialog('close');
                                dataTable.ajax.reload();
    
                                $.notify(data.message,
                                    globalPosition :"top center",
                                    className : "success"
                                )
    
                            
                        
                    );
                
                return false;
            

您还需要在控制器函数中添加 HttpPostedFileBase 参数:

actionResult Create(HttpPostedFileBase Uploadedfile)

//Do stuff here

【讨论】:

以上是关于使用 onsubmit 属性时 request.files 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

HTML 事件属性(如:onsubmit)

尝试使用 Formik 重构 onSubmit 属性

无法通过 onSubmit 属性触发的 Ajax 响应阻止表单提交。

Form表单的action和onSubmit示例介绍

onsubmit表单提交简单使用

带有 Formik 的 Material UI 单选按钮 - 未设置 onSubmit 的值