Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用不同的资源文件创建公共ViewModel?_C#_Asp.net Mvc 3_Razor_Internationalization_Resource Files - Fatal编程技术网

C# 如何使用不同的资源文件创建公共ViewModel?

C# 如何使用不同的资源文件创建公共ViewModel?,c#,asp.net-mvc-3,razor,internationalization,resource-files,C#,Asp.net Mvc 3,Razor,Internationalization,Resource Files,我有这样一个ViewModel: public class MyViewModel { [Display(Name = "One_Name", ResourceType = typeof(Resources.User.Resource1))] public string One { get; set; } [Display(Name = "Two_Name", ResourceType = typeof(Resources.User.Resource1))] pu

我有这样一个ViewModel:

public class MyViewModel
{   
   [Display(Name = "One_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string One { get; set; }

   [Display(Name = "Two_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string Two { get; set; }
}
@Html.LabelFor(model => model.One)
第1页上使用,当我做这样的事情时,效果非常好(例如收回资源):

public class MyViewModel
{   
   [Display(Name = "One_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string One { get; set; }

   [Display(Name = "Two_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string Two { get; set; }
}
@Html.LabelFor(model => model.One)
但是我也想在第2页上使用此ViewModel,但我不想将属性指向其他资源文件(例如
Resources.User.Resource2

我不想欺骗全班同学,但我愿意接受一些面向对象的把戏

问题是属性参数必须是字符串、常量、
typeof
或数组表达式


解决这个问题的最佳方法是什么?

是的,MVC似乎不支持这种情况。您可以提供自己的ResourceType类,但它必须具有返回显示字符串的静态属性(例如示例中的
public static string One_Name
public static string Two_Name
),并且没有优雅的方法让它执行您想要的操作


但是由于
Html.LabelFor
没有做任何特别惊天动地的事情,因此您可以轻松地在视图中不使用它。只需编写自己的
元素并直接获取本地化字符串,这与调用
ResourceManager.GetString
一样简单。在大多数情况下,您仍然可以使用
Html.LabelFor
,只有在某些视图确实需要改变显示文本的情况下(希望是罕见的),才可以使用自己的标签。

是的,MVC似乎不支持这种情况。您可以提供自己的ResourceType类,但它必须具有返回显示字符串的静态属性(例如示例中的
public static string One_Name
public static string Two_Name
),并且没有优雅的方法让它执行您想要的操作


但是由于
Html.LabelFor
没有做任何特别惊天动地的事情,因此您可以轻松地在视图中不使用它。只需编写自己的
元素并直接获取本地化字符串,这与调用
ResourceManager.GetString
一样简单。在大多数情况下,您仍然可以使用
Html.LabelFor
,只有在某些视图确实需要改变显示文本的情况下(希望是罕见的),您才可以使用自己的标签。

当我需要@Darin Dimitrov时,@Darin Dimitrov在哪里。:)当我需要他时,@Darin Dimitrov在哪里。:)