我有两个 ViewModels
public class AboutViewModel : ViewModel
{
public override long Id { get; set; }
public override string PageTitle { get; set; }
public override string TitleDescription { get; set; }
public override string ContentTitle { get; set; }
public virtual AboutItemViewModel AboutItem { get; set; }
}
public class AboutItemViewModel
{
public long Id { get; set; }
[AllowHtml]
public string Content { get; set; }
public string ImageUrl { get; set; }
public HttpPostedFileBase FileToUpload { get; set; }
}
的 Here is my controller:
的
[ValidateInput(false)]
[ValidateAntiForgeryToken, HttpPost]
public ActionResult Create(long? siteid, long? cid, AboutViewModel model)
{
return View(model);
}
这是我的观点:
@using (Html.BeginForm("Create", "About", new { siteid = ViewData["siteid"], cid = ViewData["cid"] },FormMethod.Post,new { enctype = "multipart/form-data", @class = "form-horizontal rtl", autocomplete = "off" }))
{
<div class="controls">
<input type="file" name="FileToUpload" id="FileToUpload" style="margin-right: -9px;">
</div>
<div class="controls">
@Html.ValidationMessageFor(o => o.AboutItem.FileToUpload, "", new { id = "spanfile", @class = "alert alert-block alert-error span3 pull-right", style = "margin-right: 160px;" })
</div>
<div class="control-group pull-left">
<button type="submit" class="btn btn-large" data-toggle="button">Save</button>
</div>
}
如何将文件绑定到 FileToUpload
以停止向我返回null?
Except:
如果我把它放在主 AboutViewModel
中,那么它会返回正确的值。
答案 0 :(得分:2)
由于FileToUpload属性位于AboutItem proprety(父ViewModel的类属性)中,因此您需要在输入元素的名称前面加上它来自的属性。这是一个很长的路要说文件输入的名称应该是AboutItem.FileToUpload。
<input type="file" name="AboutItem.FileToUpload" id="AboutItem_FileToUpload" />
这应该为您处理模型绑定。此外,您可以通过在AboutItem类的其他属性上使用HTML帮助程序来测试它。例如:
@Html.TextBoxFor(x=>x.AboutItem.Id)
这应该在HTML中呈现
<input type="text" name="AboutItem.Id" id="AboutItem_Id />
修改强>
显然,id属性将使用下划线而不是点来呈现。但是,由于ID属性未在模型绑定中使用,因此它并不重要。