C# 用于上传文件的MVC模型和控制器
我的同胞们,我想确保我正确地发展这一点。我正在开发一个ASP.NETMVC5应用程序,在开发该应用程序的同时,我也在研究MVC的体系结构,以确保我真正掌握MVC的体系结构 我目前有一个视图,如下所示,允许点击提交按钮上传多个文件C# 用于上传文件的MVC模型和控制器,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我的同胞们,我想确保我正确地发展这一点。我正在开发一个ASP.NETMVC5应用程序,在开发该应用程序的同时,我也在研究MVC的体系结构,以确保我真正掌握MVC的体系结构 我目前有一个视图,如下所示,允许点击提交按钮上传多个文件 <h2>Upload Multiple documents</h2> @using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multi
<h2>Upload Multiple documents</h2>
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<label>Logo File: </label>
@(Html.TextBoxFor(m => m.File, new { type = "file", Id = "LogoFile" }))
<label>Privacy PDF: </label>
@(Html.TextBoxFor(model => model.File, new { type = "file", Id = "PrivacyFile" }))
<label>Payment Terms PDF: </label>
@(Html.TextBoxFor(model => model.File, new { type = "file", Id = "PaymentTerms" }))
<label>Faq File: </label>
@(Html.TextBoxFor(model => model.File, new { type = "file", Id = "FaqFile" }))
<input type="submit" value="Upload" />
}
然后将该模型称为-
public class UploadFileModel //: IEnumerable
{
[FileSize(10240)]
[FileTypes("jpg,jpeg,png,pdf")]
public HttpPostedFileBase File { get; set; }
//NEWLY ADDED AFTER COMMENTS - would I add it here?????????
public IEnumerable<UploadFileModel> UploadFileModels { get; set; }
}
我的想法是,控制器代码应该从我在网上和书中阅读的内容转移到模型中
问题1-控制器中的代码是否应移动到模型中?因为从我正在研究的内容来看,业务逻辑应该在模型中处理
问题2——由于这将是一个收藏,我对收藏不感兴趣,但我正在努力成为一名大师。
a我应该为集合添加另一个名为UploadFileModels的类,该类严格适用于集合,还是简单地将UploadFileModel构建到固有集合并处理集合,如果是这样的话,如何处理
谢谢。问题1:我认为应该将代码移到模型中。这实际上有两个目的。1如果业务逻辑与控制器分离,则代码更易于理解和阅读。2.如果您将业务逻辑与控制器逻辑解耦,那么测试将变得更加容易,因此,是的,我绝对建议您将逻辑移动到模型上的函数中 问题2:不要为集合添加类。要将集合添加到帖子中,方法签名应类似于:
public ActionResult Upload(IEnumerable<UploadFileModel> fileModel)
您的控制器现在接受一个集合。作为一个旁注,当您的模型类现在处于状态时,您实际上根本不需要它,您可以简单地使用
public ActionResult Upload(IEnumerable<HttpPostedFileBase> fileModel)
并在控制器存储库模型中执行业务逻辑。我不建议您这样做,因为如果您想更改控制器,这会使更改更加困难,但值得注意的是,请尝试此方法
public class UploadFileModel //: IEnumerable
{
[FileSize(10240)]
[FileTypes("jpg,jpeg,png,pdf")]
public HttpPostedFileBase File { get; set; }
public void Save() {
//Put your Saving Logic
}
}
// An Extension method for operating files
public static class Extensions{
public static void PerformSave (this IEnumerable<UploadFileModel> collection){
foreach (var item in collection)
{
item.Save();
}
}
}
将控制器更改为
public ActionResult Upload(IEnumerable<UploadFileModel> fileModels){
if (ModelState.IsValid)
{
fileModels.PerformSave();
}
return RedirectToAction("Index");
}
将逻辑移到模型中是一个很好的实践。您不需要添加任何其他类来处理集合。我如何为集合编写代码?您可以将保存逻辑放在扩展方法或uploadfilemodel中
public class UploadFileModel //: IEnumerable
{
[FileSize(10240)]
[FileTypes("jpg,jpeg,png,pdf")]
public HttpPostedFileBase File { get; set; }
public void Save() {
//Put your Saving Logic
}
}
// An Extension method for operating files
public static class Extensions{
public static void PerformSave (this IEnumerable<UploadFileModel> collection){
foreach (var item in collection)
{
item.Save();
}
}
}
public ActionResult Upload(IEnumerable<UploadFileModel> fileModels){
if (ModelState.IsValid)
{
fileModels.PerformSave();
}
return RedirectToAction("Index");
}