【发布时间】:2009-01-23 19:18:06
【问题描述】:
有时创建新模型类型的开销很烦人。在这些情况下,我想设置 ViewData,选项似乎是:
只需使用字符串键设置 viewdata,然后将其丢弃。这有明显的问题。
将标识符(字符串键)存储在某处(在哪里?在控制器上?)并将其投射到视图页面上。在解决其中一个问题的同时,我仍在强制转换,这是有问题的,并且会扼杀类型推断。
使用 MVCContrib 强类型 Set/Get 函数。这些有时很好,但如果类型不是很具有描述性,比如布尔值“IsNew”,它们就不能很好地工作。它还扼杀了类型推断,而且它仍然只是在进行强制转换,所以我必须手动同步视图和控制器。
所以,我正在考虑使用幻像类型来组合类型和键标识符。它相当于这个伪 C#:
class ViewDataKey<T> = string
这让我可以像这样在控制器中创建标识符:
public static readonly ViewDataKey<bool> IsNew = "IsNew";
使用一些简单的扩展方法,设置数据将是:
ViewData.Set(IsNew, true);
取出它同样简单:
var isNew = ViewData.Get(FrobNozzleController.IsNew);
请注意,我们不需要指定 isNew 的类型,它是安全推断的。键和类型定义存储在一个位置。
问题:
密钥应该存储在哪里?对于“全球性”的 ViewData,一些常见的类可以正常工作。但是对于视图/控制器特定的数据?把它放在控制器上有什么缺点吗? (除了控制器的长名称?)
有没有更简单的方法,或者已经内置的东西?
【问题讨论】:
标签: c# asp.net-mvc