gpt4 book ai didi

asp.net-mvc-3 - 每个页面 `ViewModel` 和 (`Create.cshtml` 的 `Edit.cshtml` )?

转载 作者:行者123 更新时间:2023-12-03 18:34:11 26 4
gpt4 key购买 nike

问题

其实有两个相关的问题:

  1. 我应该为每个页面创建一个 ViewModel 吗?
  2. 如果您在为两个页面(Create.cshtmlEdit.cshtml)创建单个 ViewModel 类时没有问题,我该如何验证不同的 ViewModel方式(取决于正在使用的页面)

来源

View 模型

public class ProjectViewModel
{
public string Name { get; set; }
public string Url { get; set; }
public string Description { get; set; }
}

Edit.cshtml

@using BindSolution.ViewModel.Project
@model ProjectViewModel
@{
ViewBag.Title = Model.Name;
}

@Html.EditorForModel()

Create.cshtml

@using BindSolution.ViewModel.Project
@model ProjectViewModel
@{
ViewBag.Title = "New Project";
}

@Html.EditorForModel()

ProjectValidator.cs

public class ProjectValidator : AbstractValidator<ProjectViewModel>
{
private readonly IProjectService _projectService;

public ProjectValidator(IProjectService projectService)
{
_projectService = projectService;

RuleFor(p => p.Name)
.NotEmpty().WithMessage("required field")

/*The validation should be made only if the page is Create.cshtml. That is, if you are creating a new project.*/
.When(p => p.??) //Problem Here!!

.Must(n => !_projectService.Exist(n)).WithMessage("name already exists");

RuleFor(p => p.Url)
.NotEmpty().WithMessage("required field");
}
}

请注意,如果用户正在编辑现有项目,则不应再次验证属性 name

ProjectController.cs > 编辑方法

[HttpPost]
public ActionResult Edit(Guid projectID, ProjectViewModel model)
{
var project = _projectService.Repository.Get(projectID);

if (ModelState.IsValid && TryUpdateModel(project))
{
_projectService.Repository.Attach(project);
if (_projectImageWrap.Create(project) && _projectService.Repository.Save() > 0)
return AjaxRedirect("Index");
}

return View(model);
}

注意事项

如果我为每个页面创建一个 ViewModel,就会出现代码重复,因为页面具有相同的属性。

在 ViewModel 上添加一个属性以指示正在显示的页面并不能解决我实例化 ViewModel 的问题,我使用 AutoMapper。

为了验证数据,我使用 FluentValidator .

谢谢大家的帮助!

最佳答案

我的理解是 ViewModel 和 View 之间没有 1:1 的相关性。通常,您会有一个不需要 ViewModel 的 View 。

当且仅当您需要一个绝对并行并针对特定 View 量身定制的模型时,您才会想要创建一个 View 模型。这不会是 100% 的情况。

关于asp.net-mvc-3 - 每个页面 `ViewModel` 和 (`Create.cshtml` 的 `Edit.cshtml` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com