Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET MVC中从类内部使用方法?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# 如何在ASP.NET MVC中从类内部使用方法?

C# 如何在ASP.NET MVC中从类内部使用方法?,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我是ASP.NET MVC的新手,如果这是一个愚蠢的问题,请提前道歉 我目前有以下代码(简化): <form action="/" enctype="multipart/form-data" method="post"> <input type="file" name="files" multiple=""> <button type="submit">Submit</button> </form> 提交 然后

我是ASP.NET MVC的新手,如果这是一个愚蠢的问题,请提前道歉

我目前有以下代码(简化):

<form action="/" enctype="multipart/form-data" method="post">
     <input type="file" name="files" multiple="">
     <button type="submit">Submit</button>
</form>

提交
然后我使用控制器提取表单数据并进行处理,效果很好。然而,我很清楚,尽管它是MVC,我实际上只使用了控制器和视图部件,而不是模型

我现在已经创建了以下模型,并创建了相应的占位符方法。。。在本例中,我使用的是“Add”方法,我已将以前的工作代码复制到:

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);
                }
            }
        }
    }
}
namespace.Models
{
公共级自行车
{
公共int ID{get;set;}
公共日期时间日期上载{get;set;}
公共int staffno{get;set;}
公共列表文件=新列表();
公共字符串CrimeRef{get;set;}
公共void添加(IEnumerable文件)
{
foreach(文件中的var文件)
{
如果(file.ContentLength>0)
{
var fileName=Path.GetFileName(file.fileName);
var path=path.Combine(Server.MapPath(“~/App\u Data/uploads”),文件名);
file.SaveAs(路径);
}
}
}
}
}
我已更新控制器以尝试使用此方法,但它表示我有无效参数:

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");
    }
}
公共类HomeController:控制器
{
自行车=新自行车();
公共行动结果索引()
{
返回视图();
}
公共行动结果添加()
{
返回视图();
}
[HttpPost]
公共操作结果索引(IEnumerable文件)
{
添加(IEnumerablefiles);
返回操作(“索引”);
}
}
此外,尽管我在Bikes.cs模型中定义了数据类型,但似乎我并没有在任何地方使用它们

值得一提的是,以下是我的HomeController中以前的工作代码:

将我的方法移回控制器是很有诱惑力的,因为它当时确实有效——但我想至少试着把事情做好,所以我真的非常感谢您的帮助


谢谢

无效参数

排队

Bicycles.Add(IEnumerable < HttpPostedFileBase > files);
这只是C#语法的问题

关于您车型的说明

您的模型所做的只是将一些已发布的数据写入磁盘。同时,您的模型似乎是用来表示一辆或多辆被盗自行车的。我认为,如果将代码分为两部分,您将获得更好的代码组织:

  • 一个模型类,例如,
    StolenBikeCrime
    ,它表示一辆被盗的自行车及其相关的任何数据
  • 另一个类,
    StolenBikeRepository
    ,负责在磁盘(或数据库)中存储和检索
    stolenbikerime
    s。你把你目前的大部分逻辑放在这里
  • 关于分离关注点的说明


    可以将控制器看作是将HTTP和HTML世界中的内容转换到问题域中的东西。控制器可以依赖其他类来执行这项工作,但是您的模型不应该被HTTP的讨厌细节所困扰。因此,您不应该将
    HttpPostedFileBase
    传递给
    Add(…)
    方法。如果必须,请传递一个
    或一个字节数组或其他与HTTP无关的东西。

    为什么要在模型中为httppostedfilebase编写代码,而不是在post控制器中执行它???控制器是对HttpRequest进行任何解析的正确位置。另一方面,作为建议,
    Bikes Bikes=new Bikes();应该是
    Bikes Bikes=new Bikes()
    自行车_Bikes=新自行车()否则,如果你开始做自行车(摩托车)和自行车,它可能会变得非常混乱非常感谢你的信息!
    
    Bicycles.Add(files);