如何在类中使用方法.净MVC
本文关键字:使用方法 MVC | 更新日期: 2023-09-27 18:16:08
我是一个新手。. NET MVC,所以如果这是一个愚蠢的问题,请提前道歉。
我目前有以下代码(简化)在我的视图:
<form action="/" enctype="multipart/form-data" method="post">
<input type="file" name="files" multiple="">
<button type="submit">Submit</button>
</form>
然后我使用控制器来获取表单数据并处理它,这工作得很好。然而,我意识到,尽管它是MVC,我实际上只使用控制器和视图部分,而不是模型。
我现在已经创建了以下模型,并创建了适当的占位符方法…在这种情况下,我使用的是"添加"方法,我已经将以前的工作代码复制到:namespace Stolen_Bikes.Models
{
public class Bikes
{
public int ID { get; set; }
public DateTime DateUploaded { get; set; }
public int staffno { get; set; }
public List<string> files = new List<string>();
public string CrimeRef { get; set; }
public void Add(IEnumerable<HttpPostedFileBase> files)
{
foreach (var file in files)
{
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
file.SaveAs(path);
}
}
}
}
}
我已经更新了我的控制器,试图利用这个方法,但它说我有无效的参数:
public class HomeController : Controller
{
Bikes Bicycles = new Bikes();
public ActionResult Index()
{
return View();
}
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Index(IEnumerable<HttpPostedFileBase> files)
{
Bicycles.Add(IEnumerable < HttpPostedFileBase > files);
return RedirectToAction("Index");
}
}
此外,尽管我在我的Bikes.cs模型中定义了数据类型,但似乎我并没有在任何地方使用它们。
为了它的价值,这里是我的HomeController之前的工作代码:http://pastebin.com/mSruqnYW
将我的方法移回控制器是很有诱惑力的,因为它实际上是工作的-但我想至少尝试正确地做事情,所以我真的很感谢任何帮助。
谢谢
无效论证
Bicycles.Add(IEnumerable < HttpPostedFileBase > files);
不应该包含files
参数的类型。你应该只传递文件,像这样:
Bicycles.Add(files);
这只是c#语法的问题。
关于你的模型的注释
所有你的模型正在做的是写一些post数据到磁盘。同时,你的模型似乎代表了一辆或多辆被盗的自行车。我认为如果你把代码分成两部分,你会得到一个更好的代码组织:
- 一个模型类,例如,
StolenBikeCrime
,表示被盗的自行车和与之相关的任何数据。 - 另一个类,
StolenBikeRepository
,负责在磁盘(或数据库)中存储和检索StolenBikeCrime
s。你把当前的大部分逻辑都放在这里了。
关于关注点分离的说明
把你的控制器想象成把HTTP和HTML世界的东西翻译到你的问题域的东西。控制器可以依赖其他类来执行这项工作,但是您的模型不应该被HTTP的讨厌细节所困扰。因此,不应该将HttpPostedFileBase
传递给Add(...)
方法。如果你必须,传递一个Stream
或一个字节数组或任何东西-与HTTP无关的东西。