我已经尝试了在StackOverflow上找到的所有解决方案,但它们对我不起作用。我也尝试了Tetsuya Yamamoto解决方案,但是当我将其与模型一起使用时,它仍然总是返回null
。
更新
当我检查它时,我的文件类型输入将保留数据,但在被检查元素中,其值为""
我的发布文件都是这样的
@using (Html.BeginForm("AddLocation", "MasterData", FormMethod.Post, new { encytype = "multipart/form-data"}))
{
<div class="file-upload">
<input type="file" name="postedFile" />
</div>
//passing model value when using it
}
没有模型的实际效果
public ActionResult AddLocation(HttpPostedFileBase file)
{
try
{
if (file != null) //Working Perfact
{
}
return View(model);
}
catch (Exception ex)
{
return View(model);
throw;
}
}
模型始终重新运行为空
public ActionResult AddLocation(LocationModel model, HttpPostedFileBase file)
{
try
{
if (ModelState.IsValid)
{
if (file != null) //Always return null when passing with model
{
}
}
return View(model);
}
catch (Exception ex)
{
return View(model);
throw;
}
}
答案 0 :(得分:2)
只需在viewmodel类中添加Index.html
属性,该属性与function extractVariable(inputScore) {
inputScore = 27; //hard coded value works. Why?
return inputScore;
};
function assignValue(inputScore) {
console.log(inputScore); //this console.logs the hard coded value from
//extractVariable like it should do
document.getElementById("playerScore").value = inputScore;
};
元素中的名称相同:
HttpPostedFileBase
然后从控制器操作中删除第二个参数:
<input type="file" />
并用强类型绑定替换public class LocationModel
{
// other properties
public HttpPostedFileBase PostedFile { get; set; }
}
文件元素:
[HttpPost]
public ActionResult AddLocation(LocationModel model)
{
// do something
}
然后,您的文件应该在相应的viewmodel属性上可用。
旁注:
表单定义中有一个错字,应该使用<input>
而不是@Html.TextBoxFor(model => model.PostedFile, new { type = "file" })
:
enctype
参考:
mvc upload file with model - second parameter posted file is null
答案 1 :(得分:0)
您可以在模型旁边添加HttpPostedFileBase文件,它应该可以获取文件。
public class LocationModel
{
....
public HttpPostedFileBase File{ get; set; }
}
原因是asp.net mvc中不支持多个发布参数
答案 2 :(得分:0)
@ArunPratap这个问题在asp.net mvc中非常有名, 实际上POST方法获取的文件名称与视图中给定的ID名称相同, 由于表单数据是通过标题发送的, 默认情况下,它接受任何来自表单的信息,但是当您发送多个数据时,相应的POST方法需要使用相同的名称,因为它不能识别来自表单的数据。
示例 在这种情况下:
@using(Html.BeginForm("AddLocation", "MasterData", FormMethod.Post, new {enctype = "multipart/form-data" }))
{
<div class="file-upload">
@Html.TextBoxFor(model => model.PostedFile, new { type = "file" })
</div>
}
无论您为POST方法的参数如何命名,它都会将其标识为文件 但是当用其他字段扩展表单/模型时,它缺乏检测周围文件的功能。 为了获得最佳实践,请使用@TetsuyaYamamoto建议的强类型ViewModel。