MVC5 EF6 C#
我有一个Image类的Create视图。 Image类包含字符串Property“ImagePathLocal”。
我在视图上有以下内容,让用户选择要上传的文件:
<div class="form-group">
@Html.Label("Select Image", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<input type="file" name="photo" id="photo" class="btn btn-default" />
@Html.ValidationMessageFor(model => model.ImagePathLocal, "", new { @class = "text-danger" })
</div>
</div>
我必须使用
<input type="file" name="photo" id="photo" class="btn btn-default" />
因为没有等效的@ Html.InputFor(model =&gt; model.ImagePathLocal ......等等) - 我的谷歌搜索让我相信我必须这样做(纠正我,如果我'我错了)
单击“提交”时,ModelState无效,因为未填充ImagePathLocal。文件已成功发送,我可以保存到服务器(如果我跳过验证)。
所以问题是,我如何允许用户选择一个文件,然后使用他们选择的文件的名称填充ImagePathLocal属性,以便在提交表单时填充Model.ImagePathLocal,因此ModelState有效吗?
编辑: 感谢@Ehsan,主要答案是我需要使用:
@Html.TextBoxFor(m => m.ImagePathLocal, new { type="file", @class="btn btn-default"})
但是,我想在用户选择文件后填充2个属性。我的字符串属性,即文件名,以及我的HttpPostedFileBase属性,它是用户选择的文件。我更改了表单,以便用户选择HttpPostedFileBase属性:
@Html.TextBoxFor(m => m.Image, new { type="file", @class="btn btn-default"})
我挂了那个属性,这样无论何时设置它,它都会自动设置字符串属性:
private HttpPostedFileBase _image;
public HttpPostedFileBase Image
{
get
{
return _image;
}
set
{
_image = value;
ImagePathLocal = _image.FileName;
}
}
这完全符合我的要求。
答案 0 :(得分:1)
您必须使用以htmlAttributes
作为参数的TextBoxFor()
重载:
@Html.TextBoxFor(m => m.ImagePathLocal, new { type="file", @class="btn btn-default"})
您也可以使用input
,但它的名称应该是您的模型属性名称ImageLocalPath
,如下所示:
<input type="file" name="ImageLocalPath" id="ImageLocalPath" class="btn btn-default" />