表单提交时模型为空 [英] Model is null when form submitted
本文介绍了表单提交时模型为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我点击提交时,file
参数为空.
public ActionResult Create(){返回视图(新文件视图模型());}[HttpPost][初始化BlobHelper]公共 ActionResult 创建(FileViewModel 文件){如果(模型状态.IsValid){//上传文件}别的返回视图(文件);}公共类 FileViewModel{内部常量字符串 UploadingUserNameKey = "UserName";内部常量字符串 FileNameKey = "FileName";内部常量字符串文件夹 =文件";私有只读 Guid guid = Guid.NewGuid();公共字符串文件名{得到{如果(文件==空)返回空;var 文件夹 = 文件夹;return string.Format("{0}/{1}{2}", folder, guid, Path.GetExtension(File.FileName)).ToLowerInvariant();}}[必填值]公共 HttpPostedFileBase 文件 { 获取;放;}}
这是cshtml:
@model MyProject.Controllers.Admin.FileViewModel@{ViewBag.Title = "创建";Layout = "~/Views/Shared/_BackOfficeLayout.cshtml";}@using (Html.BeginForm("Create", "Files", FormMethod.Post, new { enctype = "multipart/form-data" })){<字段集><legend>创建</legend><div class="editor-label">@Html.LabelFor(model => model.File)
<div class="editor-field">@Html.TextBoxFor(model => model.File, new { type = "file" })@Html.ValidationMessageFor(model =>model.File)
<p><输入类型=提交"值=创建"/></p></fieldset>}<div>@Html.ActionLink("返回列表", "索引")
解决方案
它的命名冲突和绑定器试图将您的 File 属性绑定到具有文件名的 FileViewModel 对象,这就是为什么您得到 null.POST 名称不区分大小写.
变化:
public ActionResult 创建(FileViewModel 文件)
致:
public ActionResult 创建(FileViewModel 模型)
或任何其他名称
When I hit submit, the file
parameter is null.
public ActionResult Create()
{
return View(new FileViewModel());
}
[HttpPost]
[InitializeBlobHelper]
public ActionResult Create(FileViewModel file)
{
if (ModelState.IsValid)
{
//upload file
}
else
return View(file);
}
public class FileViewModel
{
internal const string UploadingUserNameKey = "UserName";
internal const string FileNameKey = "FileName";
internal const string Folder = "files";
private readonly Guid guid = Guid.NewGuid();
public string FileName
{
get
{
if (File == null)
return null;
var folder = Folder;
return string.Format("{0}/{1}{2}", folder, guid, Path.GetExtension(File.FileName)).ToLowerInvariant();
}
}
[RequiredValue]
public HttpPostedFileBase File { get; set; }
}
Here is the cshtml:
@model MyProject.Controllers.Admin.FileViewModel
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_BackOfficeLayout.cshtml";
}
@using (Html.BeginForm("Create", "Files", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<fieldset>
<legend>Create</legend>
<div class="editor-label">
@Html.LabelFor(model => model.File)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.File, new { type = "file" })
@Html.ValidationMessageFor(model => model.File)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
解决方案
It's naming conflict and binder trying to bind your File property to FileViewModel object with file name, that's why you get null. POST names are case-insensitive.
Change:
public ActionResult Create(FileViewModel file)
To:
public ActionResult Create(FileViewModel model)
or to any other name
这篇关于表单提交时模型为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!