我正在尝试将两个参数从视图发送到控制器,但第二个始终为空

Posted

技术标签:

【中文标题】我正在尝试将两个参数从视图发送到控制器,但第二个始终为空【英文标题】:I'm trying to send two parameters from view to controller but the second is always null 【发布时间】:2015-07-21 03:47:16 【问题描述】:

我正在尝试将视图中的两个参数(HttpPostedFileBase 和模型)发送到控制器中的 Create 方法,但变量 HttpPostedFile photos 始终获取空值。 这是控制器代码:

 public async Task <ActionResult> Create([Bind(Include = 
"Id,Name,Description")] Models.Environment environment, HttpPostedFileBase photos)
        
            if (ModelState.IsValid)
            
                if (photos!=null)
                
                    DataBlobImage dataBlobImage = new DataBlobImage();
                    environment.Logo = await 
                    dataBlobImage.CreateImage("environment", 
                    environment.Id.ToString(), photos);
                
                    //Creation date
                    environment.CreationDate = DateTime.Now;
                    //Get the creation user ID
                    environment.CreationUser = 1;
                    //By default when you create a user is active
                    environment.Active = true;
                    db.Environment.Add(environment);
                    await db.SaveChangesAsync();
                    return Json(new  success = true );
                

                return View(environment);
            

查看代码:

@using (html.BeginForm("ModalCreate", "Environment", 
        FormMethod.Post,
        new  enctype = "multipart/form-data"     ))
 

        @Html.AntiForgeryToken()
        <div class="modal-header create-window">
        <button type="button" class="close" 
        data-dismiss="modal" aria-   hidden="true">&times;</button>
        <h4 class="modal-title" id="myModalLabel">Crear nuevo Ambiente</h4>
        </div>
        <div class="modal-body">

        <div class="form-horizontal">
            @Html.ValidationSummary(true, "", new  @class = "text-danger" )
            <div class="form-group">
                @Html.LabelFor(model => model.Name,
                 htmlAttributes: new  @class = "control-label col-md-2" )
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Name, 
                    new  htmlAttributes = new  @class = "form-control"  )
                    @Html.ValidationMessageFor(model => model.Name, "", 
                    new  @class = "text-danger" )
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.Description, 
                htmlAttributes: new  @class = "control-label col-md-2" )
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Description,
                    new  htmlAttributes = new  @class = "form-control"  )
                    @Html.ValidationMessageFor(model => model.Description, "",
                    new  @class = "text-danger" )
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-10">
                    <label for="file">Subir Imagen:</label>
                    <input id="photos" name="photos" type="file" 
                     style="width: 100%;" />
                </div>
             </div>

             <div class="modal-footer">
                <button class="btn" data-dismiss="modal">Cancelar</button>
                <input class="btn btn-primary" type="submit" value="Crear" />
             </div>

            </div>

        </div> 

    

【问题讨论】:

您的代码似乎没有任何问题,但事实上您有 class="modal-headerreturn Json(new success = true ); 之类的东西表明您正在使用 ajax 提交,在这种情况下您需要显示您的脚本(您需要使用FormData 来序列化您的表单和要发布的文件) 实际上我正在使用 Bootstrap 模式弹出窗口,我认为这是它不起作用的原因。因为当我在其他视图中运行代码时,它工作正常。 【参考方案1】:

我认为您不需要为此传递额外的参数。您始终可以在您的操作方法中访问它,如下所示:

 HttpPostedFileBase file =  Request.Files["NameOfYourFileUploadControl"];

希望这会有所帮助。

【讨论】:

我尝试过这种方式,但它不起作用,我通过这种方式将文件传递给我的 Action 方法:HttpPostedFileBase photos = Request.Files["photos"];但仍然得到空值。 你能调试 Request 对象看看你得到了什么吗?检查与文件相关的任何内容是否来自客户端。 具有 HttpPostedFileBase 文件的视图是使用引导模式插件的部分视图。它没有从客户端获取文件。但是当我在我的索引视图中使用操作方法调试它时它工作了,但是,这不是我需要的。是引导模态插件的问题吗? 您能否访问此链接以解决您的问题? ***.com/questions/26563289/…

以上是关于我正在尝试将两个参数从视图发送到控制器,但第二个始终为空的主要内容,如果未能解决你的问题,请参考以下文章

将数据移动到另一个视图控制器,但第二个视图控制器在第一个视图控制器之前加载

Swift - 一对多排序

如何从ajax将多个json数组传递给控制器​​?

通过 Wifi Direct 传输文件

如何使用 uinavigationcontroller 将数据和响应从第二个视图控制器发送回第一个视图控制器

Swift 向视图控制器发送多个对象