标签: data-annotations

自定义DataAnnotation属性

当我在ASP.NET MVC 3模型中使用DisplayAttribute时,它很快就会变得很难写,因为我们必须对字符串进行硬编码或从包含的某个静态类引用字符串const strings(这就是我现在所见,见下文).但即使这对我来说太过分了.

我想提出一个类似于[SimpleDisplay]的属性,它会通过查看隐式构造资源的字符串

  1. 班级名称,
  2. 属性附加到的属性名称.

这可能吗?

像这样的东西

public class Product {

 [SimpleDisplay] // it will take Product and Name and do something like this Product_Name
 public string Name { get; set; } 

}
Run Code Online (Sandbox Code Playgroud)

这是我想要摆脱的,如果可能的话:

    [Display(ResourceType = typeof(Resources.Localize), Name = ResourceStrings.product_prettyid)]
    public virtual int PrettyId
    {
        get;
        set;
    }

    [Display(ResourceType = typeof(Resources.Localize), Name = ResourceStrings.product_name)]
    public virtual string Title
    {
        get;
        set;
    }
Run Code Online (Sandbox Code Playgroud)

现在我知道继承DisplayAttribute是不可能的,因为它是密封的.我还有其他选择吗?它甚至有意义吗?

c# asp.net-mvc data-annotations asp.net-mvc-3

2
推荐指数
1
解决办法
4743
查看次数

.net DataAnnotation和Globalization问题(服务器端)

北美的日期格式为MM/dd/yyyy

我正在为澳大利亚的项目(asp.net MVC 2)工作,日期格式为d/MM/yyyy

在web.config我有

        <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-AU"
        uiCulture="en-AU"
        enableClientBasedCulture="true"
    />
Run Code Online (Sandbox Code Playgroud)

在视图.net中以正确的格式呈现日期 - "en-AU",但是当我在14/11/2011日期提交表单时,我的ModelState.IsValid等于False.

如何教授dataannoation以"en-AU"格式正确验证日期?

//更新

刚发现这个问题只与GET有关

using(Html.BeginForm("Search", "form", FormMethod.Post)) //Works
using(Html.BeginForm("Search", "form", FormMethod.Get)) //Does'n work
Run Code Online (Sandbox Code Playgroud)

**看起来它是一个.net bug !!!

我尝试了新的mvc2/3项目

当我使用GET时,mvc绑定不使用当前文化**

谢谢.

.net globalization server-side data-annotations

2
推荐指数
1
解决办法
848
查看次数

正则表达式数据注释不允许开始/结束空间(类似于修剪)

我正在使用正则表达式数据注释来验证街道地址字段以包含数字,字母和空格(中间).如果街道字段在用户输入的文本的开头或结尾包含空格,我希望数据注释引发错误.

例:

// [123 Fake Street] = valid
// [   123 Fake Street] = not valid
// [   123 Fake Street    ] = not valid
// [123 Fake Street   ] = not valid
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

[RegularExpression(@"^[a-zA-Z 0-9]+$", ErrorMessage = "Street Address not valid.")]
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

谢谢

c# regex asp.net-mvc data-annotations

2
推荐指数
1
解决办法
5166
查看次数

我可以使用自定义验证属性手动验证属性吗?

我有自定义ValidationAttribute,但是如果选中CheckBox,我只想验证此属性.

我已经让我的类继承IValidationObject并使用该Validate方法来执行任何自定义验证,但是我可以在ValidationAttribute这里使用自定义而不是复制代码吗?如果是这样,怎么样?

public class MyClass : IValidatableObject
{
    public bool IsReminderChecked { get; set; }
    public bool EmailAddress { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (IsReminderChecked)
        {
            // How can I validate the EmailAddress field using
            // the Custom Validation Attribute found below?
        }
    }
}


// Custom Validation Attribute - used in more than one place
public class EmailValidationAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    { …
Run Code Online (Sandbox Code Playgroud)

c# validation data-annotations

2
推荐指数
1
解决办法
6148
查看次数

带有jQuery验证的ASP.NET MVC - 消息定制和本地化

我有ASP.NET MVC(4)项目,该框架支持本地化.如果我将浏览器设置更改为其他语言,框架会自动选择正确的资源文件.

但是,因为我使用的是knockoutjs,所以我会回到这些视图的jQuery验证.不幸的是,那里没有自动支持本地化.

我的问题是 - 定制和本地化jQuery验证消息的最佳实践和方法是什么,以便它们将与所有MVC资源一起自动选择?

在给定资源和消息ID的情况下,jQuery验证消息的行为方式与Data Annotations消息类似.

特别是 -

  1. 如何让jQuery 从资源中获取我想要的消息而不是默认的"此字段是必需的",因此它将打印"请输入电子邮件"和

  2. 如果我更改浏览器语言,如何让jQuery 自动以另一种语言打印相同的自定义消息?

先感谢您.

asp.net-mvc localization jquery-validate data-annotations

2
推荐指数
1
解决办法
4050
查看次数

为什么MVC模型Binder集需要int,long值?

我有一个像这样的模特

public int Id {get;set;}

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

Id在DB中自动生成.当我想要调用Create Action时ModelState说"需要Id字段"!!!! 我找到了这个问题,但它不是干净的解决方案.还有其他方法可以解决这个问题吗?

有没有办法改变值类型的Mvc ModelBinder行为?

asp.net-mvc data-annotations asp.net-mvc-4

2
推荐指数
1
解决办法
2278
查看次数

如何为我的类属性使用与sql列名不同的名称

例如,如果我希望我的类属性可以这样命名为笑:

class Product
{
   [Key]
   int ProductID {get;set;}

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

我的Sql表有2列"ProductID"和"Title",我怎么告诉类的属性将自己映射到"Title"列,考虑到"TitleTOTHEMAX"列不存在:)

c# entity-framework data-annotations visual-studio-2013 asp.net-mvc-5

2
推荐指数
1
解决办法
3247
查看次数

使用mvc3中的DataAnnotations验证文本框以仅接受有效的日期时间值

我想使用MVC3中的DataAnnotations验证文本框以接受日期时间值.但我不知道该怎么做.鉴于以下是我正在努力完成我的要求而且它无法正常工作.

    [DataType(DataType.DateTime, ErrorMessage = "Invalid Datetime")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
    [Display(Name = "Start Datetime")]
    public DateTime? StartDateTime { get; set; }
Run Code Online (Sandbox Code Playgroud)

当我在填写损坏的数据后点击提交按钮时,第一个问题是该表单获取帖子,之后它显示"无效日期"的消息,如果我输入的日期没有时间仍然形式获得发布,但这次它没有显示消息也是错误的.

所以我只想知道如何使用MVC DataAnnotations验证我的文本框以"dd/MM/yyyy HH:mm"格式接受日期时间.

c# data-annotations asp.net-mvc-3

2
推荐指数
1
解决办法
8890
查看次数

是否可以在ViewModel中重用DataAnnotations?

在我的MVC应用程序中,我在域模型中定义了DataAnnotations.尽管在使用域模型时可以检索DataAnnotations属性作为Display等,但在ViewModel上使用相同的属性并使用此ViewModel时,无法检索它们.我认为再次在ViewModel中定义DataAnnotations似乎并不好.那么,我应该遵循哪种方式?


领域模型:

public class Issue
{
    [Key] 
    public int ID { get; set; }

    [Required(ErrorMessage = "Required")]
    [Display(Name = "Project Number")]
    public int ProjectID { get; set; }

    [Required(ErrorMessage = "Required")]
    [Display(Name = "Issue Definition")]
    public string Description { get; set; }

    //... removed for brevity

    //Navigation Properties:
    public virtual ICollection<FileAttachment> FileAttachments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


视图模型:

public class IssueViewModel
{
    public int ID { get; set; }

    public int ProjectID { get; set; }

    public string Description { …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc domain-model data-annotations asp.net-mvc-viewmodel

2
推荐指数
1
解决办法
763
查看次数

如何使用DataAnnotation验证dropdownlist?

我需要你的帮助,我在使用AdataAnnotation进行验证时遇到问题

我正在尝试使用它验证下拉列表,但它有一些问题

这是我的代码

查看侧面

        @using (Html.BeginForm("addNewProject", "Activities", FormMethod.Post))
        {
            @Html.AntiForgeryToken()


            @Html.ValidationMessage("ProjectName")
            <h3>Project Name: </h3>
            @Html.TextBox("ProjectName", null,  new { @class = "text_field"} )

            @Html.ValidationMessage("ProjectOwner")
            <h3>Project Owner: </h3>
            @Html.DropDownList("ProjectOwner", (SelectList)ViewBag.Customers, new { @class = "text_field" })

            @Html.ValidationMessage("Description")
            <h3>Description: </h3>
            @Html.TextArea("Description", new { @class = "text_area"})

            @Html.ValidationMessage("Department")
            <h3>Departments: </h3>
            @Html.DropDownList("Department", (SelectList)ViewBag.Departments, new { @class = "list" })

            @Html.ValidationMessage("Region")
            <h3>Regions: </h3>
            @Html.DropDownList("Region", (SelectList)ViewBag.Regions, new { @class = "list" })

            <input type="submit" value="Add" class="submit" />
        }
Run Code Online (Sandbox Code Playgroud)

控制器侧

    public ActionResult NewProject()
    {
        List<SelectListItem> list = new …
Run Code Online (Sandbox Code Playgroud)

data-annotations asp.net-mvc-4

2
推荐指数
1
解决办法
2万
查看次数