小编Ser*_*rgi的帖子

MVC 3中DataAnnotations的整个默认错误消息列表在哪里

又一个MVC本地化问题......

我正在尝试使用本地化的资源文件本地化ASP.Net MVC 3应用程序,以按照建议在视图中显示文本.

像往常一样,问题是尝试从数据注释本地化默认错误消息时.

我知道你可以在每个属性中指定资源文件和密钥:

[Required(
ErrorMessageResourceType = typeof(CustomResourceManager), 
ErrorMessageResourceName = "ResourceKey")]
public string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)

甚至,这是更好和首选,您可以覆盖默认消息,如下所示:ASP.NET MVC中的数据注释的默认资源,因此您可以保留属性,如:

[Required]
public string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)

最后一种方法是我正在遵循的方法,并且它可以工作,但只有当您要覆盖的DataAnnotation具有ONE和ONLY ONE错误消息时,因为它总是查找与自定义资源文件中的属性相同的资源键(例如"Required"需要资源文件中的"RequiredAttribute"条目)

其他属性(如StringLength)具有多个错误消息,具体取决于您使用的可选参数.所以,如果你有一个像这样的模型:

public class Person
{
    [Required]
    [StringLengthLocalizedAttribute(10, MinimumLength = 5)]
    [Display(Name = "User name")]
    public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

错误消息是" 字段用户名必须是最小长度为5且最大长度为10的字符串. "

如果您将StringLength属性更改为:

    [StringLengthLocalizedAttribute(10)]
Run Code Online (Sandbox Code Playgroud)

错误消息更改为" 字段用户名必须是最大长度为10的字符串. "因此,在这种情况下,至少有2个默认错误消息要覆盖,@ kim-tranjan给出的解决方案失败.

我对此的部分解决方案是实现我自己的StringLength属性,如下所示:

public class StringLengthLocalizedAttribute : …
Run Code Online (Sandbox Code Playgroud)

localization data-annotations asp.net-mvc-3

17
推荐指数
2
解决办法
8199
查看次数

我在哪里可以找到MvcTextTemplateHost的API规范?

我正在尝试使用自定义T4模板将新控制器添加到MVC 3项目中.我有自己的模板,Scott Hanselman在http://www.hanselman.com/blog/ModifyingTheDefaultCodeGenerationscaffoldingTemplatesInASPNETMVC.aspx上写道,但我有兴趣在MvcTextTemplateHost类中挖掘更多,看看它提供了什么,所以我们可以自定义我们的控制器,看看它如何与"添加控制器..."对话框进行交互.

但是我找不到(在搜索谷歌之后,当然......)对这个类的引用,也没有MSDN或者任何其他MS站点...任何想法?

谢谢,塞尔吉

t4 asp.net-mvc-3

7
推荐指数
3
解决办法
2658
查看次数

使用T4MVC生成的代码在MVC 3项目中编译错误

我们正在使用ASP.Net 4和MVC 3 Framework开发Web应用程序.我已经通过NuGet安装了T4MVC,所有的视图,控制器和静态内容都成功地生成为强类型.

但是,当我尝试编译项目时,它会在生成的文件T4MVC.cs中引发错误,这是:

'T4MVC_ViewResultBase.FindView(System.Web.Mvc.ControllerContext)': 
 return type must be 'System.Web.Mvc.ViewEngineResult' to match overridden member
 'System.Web.Mvc.ViewResultBase.FindView(System.Web.Mvc.ControllerContext)'
Run Code Online (Sandbox Code Playgroud)

这是生成的源代码:

[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class T4MVC_ViewResultBase : System.Web.Mvc.ViewResultBase,
                                                            IT4MVCActionResult 
{
  public T4MVC_ViewResultBase(string area, string controller, string action):
      base()  {
       this.InitMVCT4Result(area, controller, action);
    }

    protected override void FindView(System.Web.Mvc.ControllerContext context){}

    public string Controller { get; set; }
    public string Action { get; set; }
    public RouteValueDictionary RouteValueDictionary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

错误说:

protected override void FindView(System.Web.Mvc.ControllerContext context) { }
Run Code Online (Sandbox Code Playgroud)

应该:

protected override ViewEngineResult 
               FindView(System.Web.Mvc.ControllerContext …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc t4mvc asp.net-mvc-3

5
推荐指数
1
解决办法
2133
查看次数