尝试上传包含数据的文件时来自视图模型的空值
Null values from viewmodel when trying to upload file with data
我正在尝试创建一个视图,让用户上传 Office 文件以及包含 URL、类型等的 class。我目前正在使用此视图模型:
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”的扩展程序,它创建了一个复选框列表,link 文件到特定服务。
这是我对表格的看法:
@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" />
}
我的问题是,当我在控制器的 _Upload 操作中设置断点时,所有值(文件、FileUpload-Class)都为空,但包含所选服务的 "PostedServices" 数组除外在复选框列表中。
我一直在努力解决这个问题,但没有成功。关于为什么我的表单不能正确映射到我的视图模型有什么想法吗?
您的 HttpPostedFileBase FileUpload
属性 将是 null
因为您已将输入命名为 "file"。必须
<input type="file" name="FileUpload" />.
这也意味着 FileUpload File
将在 post 返回时为空,因为您尝试将上传文件的值绑定到 typeof FileUpload
(这当然会失败 - 因此它是null
).
注意:您还没有 post编辑您的 FileUpload
class,所以不能确定没有其他问题。
另请注意,您应该从 @Html.RadioButtonFor()
中删除第三个参数。您使用的是强类型助手,这意味着所选按钮将基于 IsPrivate
的值
我正在尝试创建一个视图,让用户上传 Office 文件以及包含 URL、类型等的 class。我目前正在使用此视图模型:
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”的扩展程序,它创建了一个复选框列表,link 文件到特定服务。
这是我对表格的看法:
@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" />
}
我的问题是,当我在控制器的 _Upload 操作中设置断点时,所有值(文件、FileUpload-Class)都为空,但包含所选服务的 "PostedServices" 数组除外在复选框列表中。
我一直在努力解决这个问题,但没有成功。关于为什么我的表单不能正确映射到我的视图模型有什么想法吗?
您的 HttpPostedFileBase FileUpload
属性 将是 null
因为您已将输入命名为 "file"。必须
<input type="file" name="FileUpload" />.
这也意味着 FileUpload File
将在 post 返回时为空,因为您尝试将上传文件的值绑定到 typeof FileUpload
(这当然会失败 - 因此它是null
).
注意:您还没有 post编辑您的 FileUpload
class,所以不能确定没有其他问题。
另请注意,您应该从 @Html.RadioButtonFor()
中删除第三个参数。您使用的是强类型助手,这意味着所选按钮将基于 IsPrivate