加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – MVC关注点分离

发布时间:2020-12-16 09:36:12 所属栏目:asp.Net 来源:网络整理
导读:所以我开始创建我的MVC 3网络应用程序时,我突然意识到我可能在我的控制器中放置了太多的逻辑,它需要在模型中.这个问题是,在这个特定的实例中,我正在处理一个文件. SQL数据库表存储文件的路径,文件本身保存在目录中.所以在数据库中,文件路径存储为nvarchar,在
所以我开始创建我的MVC 3网络应用程序时,我突然意识到我可能在我的控制器中放置了太多的逻辑,它需要在模型中.这个问题是,在这个特定的实例中,我正在处理一个文件.

SQL数据库表存储文件的路径,文件本身保存在目录中.所以在数据库中,文件路径存储为nvarchar,在模型中,文件是一个字符串,一切都与该点一致.当上传文件的时候出现问题,那时我正在处理System.IO.File.

所以问题是,如果在后端它实际上是一个字符串,你如何在模型中为文件提供System.IO.File逻辑?

我已经完成了Controller的功能版本,并且已经有了一些逻辑,当我意识到我正在对抗系统时,它还要添加更多.我的意思是,为了进行服务器端验证,逻辑需要在模型中,以便输入验证根据适当的MVC规则运行和工作,显然可选地结合使用客户端验证.

目前…

这是我的观点:

@model ProDevPortMVC3.Profile

@{
    ViewBag.Title = "Profile Photo Upload";
}

<h2>Photo Upload</h2>

<img alt="Profile Image" src="@Html.DisplayFor(model => model.ProfilePhotoPath)" />

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm("UploadPhoto","Profile",FormMethod.Post,new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)
    <br />
    <input  type="file" name="File1" />
    @Html.ValidationMessageFor(model => model.ProfilePhotoPath)
    <input type="submit" value="Upload" />
}

这是我的控制器(只是相关的操作方法):

[HttpPost]
    public ActionResult UploadPhoto(int id,FormCollection form)
    {
        Profile profile = db.Profiles.Find(id);

        var file = Request.Files[0];

        if (file != null && file.ContentLength > 0)
        {
            try
            {
                string newFile = Path.GetFileName(file.FileName);
                file.SaveAs(Server.MapPath("/Content/users/" + User.Identity.Name + "/" + newFile));
                profile.ProfilePhotoPath = "/Content/users/" + User.Identity.Name + "/" + newFile;
                UpdateModel(profile);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        return View();
    }

这是我的模型(只是与文件相关的部分):

public string ProfilePhotoPath { get; set; }

所以我想,在这些特殊情况下,你们的解决方案是什么?

解决方法

描述

假设我理解你的问题.我已经读了几遍你的问题了. ;)如果我不明白,请评论我的答案,以获得更好的答案(我会更新)

我认为你想要的是……如何为你的特定情况建模验证.

您可以使用ModelState.AddModelError(“Key”,“Message)方法添加模型验证错误.

ModelState.AddModelError Adds a model error to the errors collection for the model-state dictionary.

样品

ModelState.AddModelError("ProfilePhotoName","YourMessage");

这将影响ModelState.IsValid

所以你可以做任何你想做的事(你的逻辑),并使你的模型无效.

更多信息

> MSDN – ModelStateDictionary.AddModelError Method

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读