我有一个基本的asp.net c#应用程序,该应用程序具有将一些数据提交到数据库的表单,该表单具有用于上传文件的上传按钮。
最初,存在一个问题:我无法在不上传文件的情况下提交表单,这是一个错误,因为[对象引用未设置为对象的实例],这意味着上传文件是提交表单之前必须填写。因此,为解决该问题,我在控制器中进行了一些更改。
现在,即使我没有上传任何东西,它也可以提交表单,但是新的问题是,当我上传文件并提交时,它仍然可以成功提交表单,但没有上传实际文件。
这是模型:
public class Events
{
public int Id { get; set; }
public string title { get; set; }
public string amount { get; set; }
public string Finance_Approval { get; set; }
public DateTime date_time { get; set; }
public string file_one { get; set; }
[NotMapped]
public HttpPostedFileBase file1 { get; set; }
}
这是控制器:
public ActionResult Index()
{
return View();
}
public ActionResult Request(Events e)
{
if (e.file_one==null)
{
_context.evt.Add(e);
_context.SaveChanges();
return Content("Added");
}
else
{
string filename = Path.GetFileNameWithoutExtension(e.file1.FileName);
string extension = Path.GetExtension(e.file1.FileName);
filename = filename + DateTime.Now.ToString("yymmssfff") + extension;
e.file_one = "PM_Files/" + filename;
filename = Path.Combine(Server.MapPath("~/PM_Files/"), filename);
e.file1.SaveAs(filename);
_context.evt.Add(e);
_context.SaveChanges();
return Content("Added");
}
}
这是剃刀视图:
@using (Html.BeginForm("Request", "Requester", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
@Html.LabelFor(a => a.title)
@Html.TextBoxFor(a => a.title, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(a => a.amount)
@Html.TextBoxFor(a => a.amount, new { @class = "form-control" })
</div>
<div class="form-group">
<label>Select the file word or pdf etc</label>
<input type="file" name="file1" />
</div>
<button class="btn btn-primary">Request</button>
}
答案 0 :(得分:1)
确切的问题是,您正在针对HttpPostedFileBase
字符串属性检查null,该字符串属性始终为null值,因为视图页面内没有与之关联的表单控件。您应改为检查[HttpPost]
public ActionResult Request(Events e)
{
if (e.file1 != null && e.file1.ContentLength > 0)
{
// save the file
return Content("Added");
}
else
{
// do something else
return Content("Added");
}
}
:
HttpPostedFileBase
如果上面的标准Request.Files
检查不起作用,则应尝试[HttpPost]
public ActionResult Request(Events e)
{
if (Request.Files.Count > 0)
{
foreach (string files in Request.Files)
{
if (!string.IsNullOrEmpty(files))
{
// save the file
}
}
return Content("Added");
}
else
{
// do something else
return Content("Added");
}
}
来获取文件信息:
FormMethod.Post
注释:
1)表单使用[HttpPost]
,因此控制器操作应使用{{1}}属性。
2)[NotMapped]
attribute仅用于数据模型,以排除实体到数据库中列的映射-在视图模型中不使用,只需将其删除。