0

我有这两个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停止返回空值?

Except: 如果我把它放在 main 中AboutViewModel,它会返回一个正确的值。

4

1 回答 1

2

由于 FileToUpload 属性位于 AboutItem 属性中,它是父 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 属性,因此它应该无关紧要。

于 2013-04-07T02:32:02.217 回答