c# - 针对控制器发布的模型的命名约定?
问题描述
我们使用术语ViewModel来表示从控制器返回并传递给视图的类。我们没有使用 ViewBag 或 ViewData,而是使用了一个强类型类,它基本上存储了视图需要的每个值。
public IActionResult OrderStep1()
{
var model = new ViewModelStep1()
{
SomeProperty = "SomeValue",
...
}
return View(model);
}
我正在寻找一个命名约定,它指定我们应该如何命名一个包含从表单的提交按钮发布到控制器的属性的类。在以下示例中,我选择OrderStep2
了该类的临时名称。
对于我们的多步骤订单向导,我们使用Post/Redirect/Get模式。因此,我可以丰富信息OrderStep2
并返回特定的 ViewModel OrderStep2VM
。
[HttpPost]
[ValidateAntiForgeryToken]
[Route("order/step2")]
public async Task<IActionResult> OrderStep2(OrderStep2 model)
{
// save some changes into the database and retrieve a GUID configurationId
return RedirectToAction(nameof(OrderStep2()), new { configurationId = "GUID" });
}
[Route("order/step2/{configurationId}")]
public IActionResult OrderStep2(Guid configurationId)
{
// retrieve configuration from database based on the configurationID
// do something else
var model = new OrderStep2VM()
{
....
};
return View(model);
}
由于我希望代码组织良好,因此我想将类分组OrderStep2
到一个单独的命名空间中。目前,我正在考虑将它们称为PostModels,即 ,OrderStep2PM
但我不想为可能已经存在的东西定义一个新术语。
(如果您想知道我为什么不使用 TempData:应用程序的工作流程需要保存不完整的表单数据,这允许我跳过 TempData,因为无论如何我都需要存储在数据库中)。
解决方案
很简单,您发送到视图的模型应该与您从视图返回的模型相同。因此,如果您正在使用ViewModelStep1
then 这也是您应该在 post 操作中绑定的内容。
术语“视图模型”是从 MVVM(模型-视图-视图模型)中偷来的,因为它在 MVC 中的用途与 MVVM 中的视图模型相似。如果您不喜欢从您的帖子绑定到的模型被称为“视图模型”这一事实,那么您可以简单地使用更通用的东西,如“DTO”(数据传输对象),它在模型绑定的上下文和为视图提供数据。
总而言之,这里没有硬性规定。以最有意义的方式命名您的课程。这些名字并不神奇。但是,无论您如何命名该类,您都将对视图模型和绑定模型使用相同的名称。
推荐阅读
- ruby-on-rails - 此代码在自动化测试中未通过测试,但在 rails 控制台中有效
- cakephp-3.0 - 如何在 cakephp 中将 3 个子域合并到主域中
- javascript - 将机器人登录名放入突击队命令文件中以调用表情符号而无需登录两次
- c++ - SDL Window 会导致鼠标每隔几秒冻结一次
- php - 为什么我在尝试访问 Paysafe Api 服务器时收到错误 500?
- android - BottomAppBar 未正确加载
- solr - Solr - 获取更多下一个“cursorMark”索引以实现真正的分页
- kotlin-coroutines - 注意到奇怪的行为,不确定它是否错误地使用了 coroutineScope
- python - 如何使用 BeautifulSoup 从 div 部分中提取 str
- python - 如何将字典中的值与字符串中的多个元素相加?