如何在类中使用方法.净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

将我的方法移回控制器是很有诱惑力的,因为它实际上是工作的-但我想至少尝试正确地做事情,所以我真的很感谢任何帮助。

谢谢

如何在类中使用方法.净MVC

无效论证

Bicycles.Add(IEnumerable < HttpPostedFileBase > files);

不应该包含files参数的类型。你应该只传递文件,像这样:

Bicycles.Add(files);

这只是c#语法的问题。

关于你的模型的注释

所有你的模型正在做的是写一些post数据到磁盘。同时,你的模型似乎代表了一辆或多辆被盗的自行车。我认为如果你把代码分成两部分,你会得到一个更好的代码组织:

  1. 一个模型类,例如,StolenBikeCrime,表示被盗的自行车和与之相关的任何数据。
  2. 另一个类,StolenBikeRepository,负责在磁盘(或数据库)中存储和检索StolenBikeCrime s。你把当前的大部分逻辑都放在这里了。

关于关注点分离的说明

把你的控制器想象成把HTTP和HTML世界的东西翻译到你的问题域的东西。控制器可以依赖其他类来执行这项工作,但是您的模型不应该被HTTP的讨厌细节所困扰。因此,不应该将HttpPostedFileBase传递给Add(...)方法。如果你必须,传递一个Stream或一个字节数组或任何东西-与HTTP无关的东西。