尝试使用数据上载文件时,viewmodel中的空值

时间:2015-03-30 07:00:38

标签: c# asp.net-mvc razor model-binding

我正在尝试创建一个视图,允许用户上传Office文件以及包含URL,类型等的类。我正在使用此视图模型:

public class ServiceFileUploadViewModel
{
    public FileUpload File { get; set; }
    public IList<Service> AvalibleServices { get; set; }
    public IList<Service> SelectedServices { get; set; }
    public PostedServices PostedServices { get; set; }
    public HttpPostedFileBase FileUpload { get; set; }

}
public class PostedServices
{
    public int[] ServicesIds { get; set; }
}

我正在使用一个名为“CheckBoxListFor”的扩展程序,它会创建一个复选框列表,将文件链接到特定服务。

这是我对表格的看法:

@model ServiceFileUploadViewModel


@using (Html.BeginForm("_Upload", "ServiceCatalog", FormMethod.Post, new { enctype = "multipart/form-data" }))

{
<div>
    <input type="file" name="file" />
</div>

<div>
    Dokumenttyp
</div>
<div>
    @Html.EditorFor(m => m.File.DocumentType)
</div>

<div>
    @Html.CheckBoxListFor(m => m.PostedServices.ServicesIds,
                        m => m.AvalibleServices,
                        entity => entity.Id,
                        entity => entity.Name,
                        m => m.SelectedServices,
                        Position.Vertical)
</div>

<div>
    <label>Visningsalternativ</label>
</div>
<div>
    @Html.RadioButtonFor(m => m.File.IsPrivate, "true", true) Interninformation
</div>
<div>
    @Html.RadioButtonFor(m => m.File.IsPrivate, "false", false) Kundinformation
</div>

<input type="submit" value="Ladda upp" />
}

我的问题是,当我在我的Controller中的_Upload Action中设置断点时,所有值(文件,FileUpload-Class)都为null,除了“PostedServices”数组,其中包含在Checkboxlist中选择的服务。

我一直试图解决这个问题,但没有成功。我的表单无法正确映射到我的viewmodel的任何想法?

1 个答案:

答案 0 :(得分:0)

您的HttpPostedFileBase FileUpload属性将为null,因为您已将输入“文件”命名为。它必须是

<input type="file" name="FileUpload" />.

这也意味着FileUpload File在回发后将为空,因为您尝试将上传文件的值绑定到typeof FileUpload(当然失败了 - 因此它是null

注意:您尚未发布FileUpload课程,因此无法确定是否存在其他问题。

另请注意,您应从@Html.RadioButtonFor()中删除第3个参数。您使用强类型帮助程序,这意味着所选按钮将基于IsPrivate

的值