标签: data-annotations

来自数据注释的Asp.Net Mvc隐藏字段

我认为这将是谷歌的快速搜索,但也许我错过了一些东西.有没有办法使用数据注释来设置ViewModel属性,以便在标记呈现时创建HiddenInput?

我发现的唯一注释是完全隐藏视图中的属性,我仍然希望渲染属性,但作为隐藏输入.

asp.net asp.net-mvc data-annotations

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

"需要Id字段"创建的验证消息; 我未设置为[必需]

当我尝试使用Asp.Net MVC 2中的创建样式操作创建实体时,会发生这种情况.

POCO具有以下特性:

public int Id {get;set;}

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

在创建实体时,会自动设置Id,因此在Create操作中不需要它.

ModelState表示"需要Id字段",但我没有将其设置为如此.这里有自动发生的事吗?

编辑 - 原因显示

Brad Wilson通过Paul Speranza在下面的一条评论中回答了这个问题的原因,他说(欢呼保罗):

你提供了身份证的价值,你只是不知道你是谁.它位于默认路由的路由数据中("{controller}/{action}/{id}"),其默认值为空字符串,对int无效.使用action参数的[Bind]属性排除ID.我的默认路由是:new {controller ="Customer",action ="Edit",id =""} //参数默认值

编辑 - 更新模型技术

我实际上通过使用TryUpdateModel和与之相关的exclude参数数组改变了我再次这样做的方式.

    [HttpPost]
    public ActionResult Add(Venue collection)
    {
        Venue venue = new Venue();
        if (TryUpdateModel(venue, null, null, new[] { "Id" }))
        {
            _service.Add(venue);
            return RedirectToAction("Index", "Manage");
        }
        return View(collection);
    }
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc data-annotations asp.net-mvc-2

69
推荐指数
5
解决办法
5万
查看次数

如何在ASP.MVC中指定多行编辑器的列和行?

在ASP.MVC 3中,如何指定多行EditorFor(textarea)的列和行?我正在使用[UIHint("MultilineText")],但找不到有关如何为文本区域添加属性的任何文档.

期望的HTML:

 <textarea cols="40" rows="10"></textarea>
Run Code Online (Sandbox Code Playgroud)

我的MVC 3模型的相关部分:

[UIHint("MultilineText")]
public string Description { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的Razor cshtml的相关部分:

<div class="editor-field">
    @Html.EditorFor(model => model.Description)
</div>
Run Code Online (Sandbox Code Playgroud)

我在视图中获得的内容:

 <div class="editor-field">
     <textarea class="text-box multi-line" id="Description" name="Description"></textarea>
 </div>
Run Code Online (Sandbox Code Playgroud)

如何设置行和列?

asp.net-mvc data-annotations razor

67
推荐指数
4
解决办法
9万
查看次数

单元测试ASP.NET DataAnnotations验证

我正在使用DataAnnotations进行模型验证,即

    [Required(ErrorMessage="Please enter a name")]
    public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我正在检查ModelState的值.对于从我的视图发布的无效模型数据,这正确返回false.

但是,在执行我的控制器操作的单元测试时,ModelState始终返回true:

    [TestMethod]
    public void Submitting_Empty_Shipping_Details_Displays_Default_View_With_Error()
    {
        // Arrange
        CartController controller = new CartController(null, null);
        Cart cart = new Cart();
        cart.AddItem(new Product(), 1);

        // Act
        var result = controller.CheckOut(cart, new ShippingDetails() { Name = "" });

        // Assert
        Assert.IsTrue(string.IsNullOrEmpty(result.ViewName));
        Assert.IsFalse(result.ViewData.ModelState.IsValid);
    }
Run Code Online (Sandbox Code Playgroud)

在测试中我是否需要做额外的事情来设置模型验证?

谢谢,

asp.net asp.net-mvc data-annotations

65
推荐指数
4
解决办法
3万
查看次数

实体框架代码First Fluent Api:向列添加索引

我正在运行EF 4.2 CF并想在我的POCO对象的某些列上创建索引.

举个例子,假设我们有这个员工类:

public class Employee
{
  public int EmployeeID { get; set; }
  public string EmployeeCode { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public DateTime HireDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我们经常通过EmployeeCode对员工进行搜索,因为有很多员工,因为性能原因而将索引编入索引会很不错.

我们能用流利的api以某种方式做到这一点吗?或者数据注释?

我知道可以执行这样的sql命令:

context.Database.ExecuteSqlCommand("CREATE INDEX IX_NAME ON ...");
Run Code Online (Sandbox Code Playgroud)

我非常想避免那样的原始SQL.

我知道这不存在,但寻找沿着这些方向的东西:

class EmployeeConfiguration : EntityTypeConfiguration<Employee>
    {
        internal EmployeeConfiguration()
        {
            this.HasIndex(e => e.EmployeeCode)
                .HasIndex(e => e.FirstName)
                .HasIndex(e => e.LastName);
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者使用System.ComponentModel.DataAnnotationsPOCO可能看起来像这样(我知道这不存在):

public class Employee
{ …
Run Code Online (Sandbox Code Playgroud)

c# fluent-interface entity-framework-4 data-annotations ef-code-first

63
推荐指数
7
解决办法
6万
查看次数

整数值的必需属性

我有一个带Id属性的viewmodel

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

但我认为这个属性仅适用于字符串属性.

如果未设置Id,则Id的值为0且模型有效.

如果没有设置int属性的值,我该如何强制执行,模型将无效?

asp.net-mvc data-annotations

60
推荐指数
4
解决办法
3万
查看次数

使用数据注释的有条件的必需属性

我有一个这样的课:

public class Document
{
   public int DocumentType{get;set;}

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

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

现在,如果我[Required]NameName2属性上放置数据注释,那么一切正常,如果NameName2为空,验证将引发错误.

但我希望Name只有当字段DocumentType等于1 Name2时才需要字段,只有当DocumentType等于2 时才需要字段.

public class Document
{
   public int DocumentType{get;set;}

   [Required(Expression<Func<object, bool>>)]
   public string Name{get;set;}

   [Required(Expression<Func<object, bool>>)]
   public string Name2{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

但我知道我不能,它会导致错误.我该怎么做才能满足这个要求?

c# requiredfieldvalidator required data-annotations

55
推荐指数
5
解决办法
5万
查看次数

DataAnnotations:递归验证整个对象图

我有一个带有DataAnnotation属性的对象图,其中对象的某些属性是本身具有验证属性的类,依此类推.

在以下场景中:

public class Employee
{
    [Required]
    public string Name { get; set; }

    [Required]
    public Address Address { get; set; }
}

public class Address
{
    [Required]
    public string Line1 { get; set; }

    public string Line2 { get; set; }

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

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

如果我尝试来验证EmployeeAddress与没有价值PostalCode,那么我想(和期望)例外,但我得到没有.我是这样做的:

var employee = new Employee
{
    Name = "Neil Barnwell",
    Address = new Address …
Run Code Online (Sandbox Code Playgroud)

.net c# validation recursion data-annotations

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

如何从代码中检索数据注释?(编程)

我正在使用System.ComponentModel.DataAnnotations我的Entity Framework 4.1项目进行验证.

例如:

public class Player
{
    [Required]
    [MaxLength(30)]
    [Display(Name = "Player Name")]
    public string PlayerName { get; set; }

    [MaxLength(100)]
    [Display(Name = "Player Description")]
    public string PlayerDescription{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我需要检索Display.Name注释值以在消息中显示它,例如所选的"玩家名称"是Frank.

================================================== ===============================

我需要检索注释的另一个例子:

var playerNameTextBox = new TextBox();
playerNameTextBox.MaxLength = GetAnnotation(myPlayer.PlayerName, MaxLength);
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

c# data-annotations entity-framework-4.1

50
推荐指数
3
解决办法
4万
查看次数

数据注释以验证确认密码

我的用户模型具有这些数据注释以验证输入字段:

[Required(ErrorMessage = "Username is required")]
[StringLength(16, ErrorMessage = "Must be between 3 and 16 characters", MinimumLength = 3)]
public string Username { get; set; }

[Required(ErrorMessage = "Email is required"]
[StringLength(16, ErrorMessage = "Must be between 5 and 50 characters", MinimumLength = 5)]
[RegularExpression("^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$", ErrorMessage = "Must be a valid email")]
public string Email { get; set; }

[Required(ErrorMessage = "Password is required"]
[StringLength(255, ErrorMessage = "Must be between 5 and 255 characters", MinimumLength = 5)]
public string Password …
Run Code Online (Sandbox Code Playgroud)

c# asp.net data-annotations

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