C# 如何在ASP.NET MVC中从类内部使用方法?
我是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> 提交 然后
<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);