我们有非常简单的文件输入形式。在发表形式的时候,能从模型处理其他元素。但文件输入始终返回null。 顺便说一句,我们使用Telerik Sitefinity中的视图和控制器作为自定义控件。它可能与此有关,因为我们找不到任何解决方案。
这是视图代码
@using (Html.BeginForm("Index", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<div class="form">
<dl>
<dd>
@Html.LabelFor(model => model.ShareRecipe.Name)
@Html.EditorFor(model => model.ShareRecipe.Name)
</dd>
<dd>
@Html.LabelFor(model => model.ShareRecipe.EmailAddress)
@Html.EditorFor(model => model.ShareRecipe.EmailAddress)
</dd>
<dd>
@Html.LabelFor(model => model.ShareRecipe.RecipeArea)
@Html.EditorFor(model => model.ShareRecipe.RecipeArea)
</dd>
<dd>
<input type="file" name="fileUpload" id="fileUpload" />
</dd>
<dd class="last">
<input type="submit" class="btn btn-danger" onclick="return ValidateForm();" value="Send" /></dd>
</dl>
</div>
}
这是我们的控制器方。
[HttpPost]
public ActionResult Index(ShareRecipeModel model, HttpPostedFileBase fileUpload, FormCollection values)
{
if (fileUpload != null && fileUpload.ContentLength > 0)
{
var fileName = Path.GetFileName(fileUpload.FileName);
var path = Path.Combine(Server.MapPath("~/img/"), fileName);
fileUpload.SaveAs(path);
model.ImageUrl = fileName;
}
}
我们也尝试使用基本表单标签发布。像:
<form method="post" enctype="multipart/form-data"></form>
它不起作用。 同样在Html.BeginForm中,我们尝试了所有变体索引和控制器名称,如:
null,null
"Index","ShareRecipeController"
等
最后,我想提供有关在Telerik Sitefinity中使用自定义控件的信息 我们的控制器上有这一行:
[ControllerToolboxItem(Name = "ShareRecipe", Title = "Share Your Recipe", SectionName = "MvcWidgets")]
public class ShareRecipeController : BaseController
如果有人有任何想法,对我们来说可能很棒, 提前致谢, Serhad。
答案 0 :(得分:2)
在我们的表单标签中,我们有必要的元素“FormMethod.Post,new {enctype =”multipart / form-data“}”,但由于sitefinity结构,我们在页面中使用自定义控件作为自定义用户控件。它是该页面的相关母版页。母版页中的表单标记在自定义控件中影响我们的表单标记。
要避免此问题,请在主页标记中添加“method =”post“enctype =”multipart / form-data“属性,而不是添加自定义控件视图。
参考:http://www.sitefinity.com/developer-network/forums/bugs-issues-/upload-file-with-mvc