我认为这将是谷歌的快速搜索,但也许我错过了一些东西.有没有办法使用数据注释来设置ViewModel属性,以便在标记呈现时创建HiddenInput?
我发现的唯一注释是完全隐藏视图中的属性,我仍然希望渲染属性,但作为隐藏输入.
当我尝试使用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.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)
如何设置行和列?
我正在使用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)
在测试中我是否需要做额外的事情来设置模型验证?
谢谢,
本
我正在运行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
我有一个带Id属性的viewmodel
[Required]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
但我认为这个属性仅适用于字符串属性.
如果未设置Id,则Id的值为0且模型有效.
如果没有设置int属性的值,我该如何强制执行,模型将无效?
我有一个这样的课:
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]在Name和Name2属性上放置数据注释,那么一切正常,如果Name或Name2为空,验证将引发错误.
但我希望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)
但我知道我不能,它会导致错误.我该怎么做才能满足这个要求?
我有一个带有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)
如果我尝试来验证Employee的Address与没有价值PostalCode,那么我想(和期望)例外,但我得到没有.我是这样做的:
var employee = new Employee
{
Name = "Neil Barnwell",
Address = new Address …Run Code Online (Sandbox Code Playgroud) 我正在使用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)
我怎样才能做到这一点?
我的用户模型具有这些数据注释以验证输入字段:
[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) data-annotations ×10
asp.net-mvc ×5
c# ×5
asp.net ×3
.net ×1
razor ×1
recursion ×1
required ×1
validation ×1