gpt4 book ai didi

c# - 强类型的 ASP.NET MVC ViewData 扩展 - 标识符放在哪里?

转载 作者:太空宇宙 更新时间:2023-11-03 22:28:01 25 4
gpt4 key购买 nike

有时创建新模型类型的开销很烦人。在这些情况下,我想设置 ViewData,选项似乎是:

  1. 只需使用字符串键设置 View 数据,然后将其强制转换。这有明显的问题。

  2. 将标识符(字符串键)存储在某处(哪里?在 Controller 上?)并将其转换到 View 页面上。在解决其中一个问题时,我仍在转换,这是有问题的,并且会破坏类型推断。

  3. 使用 MVCContrib 强类型设置/获取函数。有时这些很好,但是如果类型不是很具有描述性,比如 bool 值“IsNew”,它们就不会很好地工作。它还会终止类型推断,而且它仍然几乎只是在进行强制转换,因此我必须手动同步 View 和 Controller 。

因此,我正在考虑使用虚拟类型来组合类型和键标识符。它相当于这个伪 C#:

class ViewDataKey<T> = string

这样我就可以像这样在 Controller 中创建标识符:

public static readonly ViewDataKey<bool> IsNew = "IsNew";

使用一些简单的扩展方法,设置数据将是:

  ViewData.Set(IsNew, true);

把它拿出来也很容易:

var isNew = ViewData.Get(FrobNozzleController.IsNew);

注意我们不需要指定 isNew 的类型,它是安全推断的。键和类型定义存储在一个位置。

问题:

  1. key 应该存储在哪里?对于“global-ish”ViewData,一些通用类工作正常。但是对于 View / Controller 特定数据?将它放在 Controller 上有什么缺点吗? (除了 Controller 的长名称?)

  2. 有没有更简单的方法,或者已经内置的东西?

最佳答案

我认为这就是模型在 MVC 模式中所做的事情。为什么不使用类型化 View 呢?

我相信您通过在 Controller 和 View 之间引入另一个依赖关系只会让事情变得更复杂。在代码行或类似的方面,我没有看到任何具体的好处。您必须声明变量的存在,您也需要在模型类定义中这样做。

这样做不会给您带来任何显着优势。

关于c# - 强类型的 ASP.NET MVC ViewData 扩展 - 标识符放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/474114/

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