标签: data-annotations

是否可以使用数据注释来验证传递给Controller的Action方法的参数?

我正在使用Data Annotations在ASP.NET MVC中验证我的模型.这适用于具有复杂参数的动作方法,例如,

public class Params  
{  
    [Required] string Param1 {get; set;}   
    [StringLength(50)] string Param2 {get; set;}  
}


ActionResult MyAction(Params params)  
{  
   If(ModeState.IsValid)  
   {  
      // Do Something  
   }  
}
Run Code Online (Sandbox Code Playgroud)

如果我想将单个字符串传递给Action Method(如下所示),该怎么办?有没有办法使用数据注释或我必须将字符串包装成一个类?

ActionResult MyAction(string param1, string param2)  
{  
   If(ModeState.IsValid)  
   {  
     // Do Something  
   }  
}  
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc data-annotations

10
推荐指数
1
解决办法
5319
查看次数

使用RIA服务的自定义数据注释

如果您将RIAServices与Custom ValidatorAttributes一起使用,那么这不仅仅是一个警告.

这是Senario,我正在创建一个自定义DataAnnotation,它将根据是否设置了一系列其他属性来验证属性,例如; 如果Prop1为100,则Prop2,Prop3或Prop4不能为0,其中一个必须设置.我也在使用RIA Services,所以我创建了ValidatorAttribute我的.shared.cs文件.在为helper CannotBeZeroIf类编写了所有测试之后,我开始将属性添加到Model Class中.当然,事情开始变得非常错误.RIA Services在CodeGen期间开始抛出NullReferenceException.

CreateRiaClientFilesTask - > NullReferenceException

事实证明,我正在使用验证器的构造函数将值传递给类.通过切换到使用ObjectInitialization语法,一切都得到了修复.

在处理RIA服务和自定义数据注释验证器时,答案似乎是使用ObjectInitializer语法.

wcf-ria-services data-annotations

10
推荐指数
1
解决办法
423
查看次数

有没有办法从继承的属性中删除属性?

是否可以从继承的属性中删除属性?我认为通过使用关键字,我可以这样做......

 public class Person
 {
     [Required]
     public string FirstName { get; set; }

     [Required]
     public string LastName { get; set; }
 }

 public class Employee : Person
 {
     [Required]
     public string JobTitle { get; set; }

     public new string FirstName { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

......但这根本不起作用.这让我感到惊讶,因为的特别是隐藏继承的成员.

c# data-annotations

10
推荐指数
1
解决办法
2201
查看次数

实体框架 - 使用数据注释的属性的默认值

我有这样的模特

public class MyModel
{
    public int MyModelId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法,使用数据注释,设置属性的值 - 比如标题 - 默认为其他属性值,即名称.就像是:

if(MyModel.Title == "") MyModel.Title = MyModel.Name;
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc entity-framework data-annotations

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

在敲除模板绑定中不显眼的客户端验证

我有一个带有数据注释的模型,我是一个使用knockout模板绑定和映射插件的viewmodel动态绑定.我正在尝试对我的模型进行不显眼的客户端验证.在这种情况下我们如何做到这一点.任何帮助/建议?

public class MyUser
    {
        [Required]
        [StringLength(35)]
        public string Username { get; set; }

        [Required]
        [StringLength(35)]
        public string Forename { get; set; }

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

在我看来,我是使用ajax动态模板绑定MyUser列表.

public JsonResult TestKnockout()
        {
            IList<MyUser> myUserList = new List<MyUser>();
            myUserList.Add(new MyUser { Username = "ajohn", Surname = "surname" });
            myUserList.Add(new MyUser { Username = "ajohn1", Surname = "surname1" });

            return Json(myUserList, JsonRequestBehavior.AllowGet);
        }
    }
Run Code Online (Sandbox Code Playgroud)

视图:

<form id="Userform" action='@Url.Action("Save", "Home")' data-bind="template: {name: 'UserTemplate', foreach:UserList}">
<input type="Submit" name="name" …
Run Code Online (Sandbox Code Playgroud)

unobtrusive-javascript data-annotations unobtrusive-validation knockout-mapping-plugin knockout.js

10
推荐指数
2
解决办法
8619
查看次数

Orchard CMS DataAnnotations - 客户端验证

我试图在Orchard模块中进行不引人注意的客户端验证,但我遇到了问题.

在这个例子中,我只是尝试使用Html.TextBoxFor()在文本框字段上强制执行RequiredAttribute.

它看起来好像Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorProvider阻止了HTML5输入属性的呈现,具体来说:

data-val
data-val-required
Run Code Online (Sandbox Code Playgroud)

对于标准DataAnnotations RequiredAttribute.jQuery.validate.unobtrusive需要这些属性才能工作.

LocalizedModelValidatorProvider将RequiredAttribute映射到LocalizedRequiredAttribute,因此在渲染用LocalizedRequiredAttribute修饰的模型属性的文本框输入时,Orchard ViewEngine中的错误(或未实现的功能)可能是多少?

我怀疑这不会发生:

tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));
Run Code Online (Sandbox Code Playgroud)

(来自System.Web.Mvc.Html.InputExtensions)

我目前正在运行Orchard 1.3.9.

注意:一个hacky解决方法是删除OrchardStarter模块中LocalizedModelValidatorProvider的注册,并默认返回标准MVC 3提供程序,尽管如果可能的话我不想打扰Orchard源(更不用说我可能需要本地化)消息在某些时候)......

jquery-validate orchardcms data-annotations unobtrusive-validation asp.net-mvc-3

10
推荐指数
1
解决办法
1452
查看次数

ASP.NET MVC4多语言数据注释

在标准应用程序中,我有以下内容:

[Required]
[DisplayName("Email Address")]
public string EmailAddress { get; set; }
Run Code Online (Sandbox Code Playgroud)

...这反过来会自动生成一个英文表格字段的标签.

现在,如果我需要我的应用程序支持5种语言,那么ASP.NET MVC应用程序处理此问题的最佳方法是什么?

适用范围约为400-600个数据字段.

更新:我还需要支持更新应用程序中的小部分文本,如页面名称和每个表单的引入(小段落).

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

10
推荐指数
1
解决办法
9864
查看次数

使用Entity Framework创建数据库索引

说我有以下型号:

[Table("Record")]
public class RecordModel
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [Display(Name = "Record Id")]
    public int RecordId { get; set; }

    [StringLength(150)]
    public string Name { get; set; }

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

是否可以IMEI通过使用属性,数据注释或模型中的某些内容向列添加索引?

.net c# indexing entity-framework data-annotations

10
推荐指数
2
解决办法
6599
查看次数

F#int.MaxValue是"不是有效的常量表达式",但System.Int32.MaxValue是?

TL; DR: F#编译器解释int在这种情况下为int操作者,如由Eugene Fotin确定通过基因Belitski时膨胀.最佳解决方法是使用System.Int32.MaxValue或如下所述的唯一类型别名.


请考虑以下记录类型:

type User = {
    Username : string
}
Run Code Online (Sandbox Code Playgroud)

我想要Username至少三个字符,所以我使用该StringLength属性.没有最大长度,所以我将它设置为int.MaxValue:

type User = {
    [<StringLength(int.MaxValue, MinimumLength=3)>]
    Username : string
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

这不是有效的常量表达式或自定义属性值.

如果我使用的话,一切都是桃子的System.Int32:

type User = {
    [<StringLength(System.Int32.MaxValue, MinimumLength=3)>]
    Username : string
}
Run Code Online (Sandbox Code Playgroud)

如果我别名它也会编译int:

type User = {
    [<StringLength(num.MaxValue, MinimumLength=3)>]
    Username : string
}
and num = int
Run Code Online (Sandbox Code Playgroud)

或完全符合类型:

type User = {
    [<StringLength(Microsoft.FSharp.Core.int.MaxValue, MinimumLength=3)>] …
Run Code Online (Sandbox Code Playgroud)

.net f# data-annotations

10
推荐指数
2
解决办法
2962
查看次数

客户端表单验证不适用于MVC中的模态对话框

我正在更改创建表单以成为模式对话框和jquery Unobtrusive验证停止工作,不知道如何解决它.

Index.cshtml有一个触发模式对话框的链接.

<a href="#" id="createCustomer">Create</a>
@section scripts{
<script type="text/javascript">
$('#createCustomer').on('click', function () {
        $.get('/Customer/Create', function (data) {
            $('#modalContainer').html(data);
            $('#myModal').modal({});
        });
    });
Run Code Online (Sandbox Code Playgroud)

Create.cshtml是局部视图.

@model Demo.Web.Models.CustomerVm
@using (Html.BeginForm("Create", "Customer", FormMethod.Post, new { @id="createForm" }))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Customer</h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name)
                @Html.ValidationMessageFor(model => model.Name)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

@section Scripts …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc data-annotations unobtrusive-validation asp.net-mvc-viewmodel

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