我正在尝试将数据注释实现到我的Linq to SQL对象.生成.dbml文件,我不知道如何在不触及生成的源代码的情况下向对象添加数据注释.
我试图将数据注释添加到对象的单独的部分类中,但它没有识别它,也没有Intelli意义.
我有以下代码,但一旦提交到服务器,我得到的字符串是"未定义"而不是null或空.这导致问题,因为我无法执行验证.任何想法如何防止这种情况发生时使用淘汰赛.
var viewModel = {
userName: ko.observable(""),
emailAddress: ko.observable(""),
verifyEmailAddress: ko.observable(""),
OptOut: ko.observable(true),
Grades: ["Grade 1", "Grade 2", "Grade 3", "Grade 4", "Grade 5", "Grade 6"],
gradeSelected: ko.observable(["Grade 1"])
};
ko.applyBindings(viewModel);
$("#addUser").click(function (e) {
$.ajax({
url: 'AddUser',
dataType: 'json',
data: JSON.stringify(viewModel),
type: 'POST',
success: function (data) {
$("#errorSection").text(data.Success).show();
}
});
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
提前致谢
我希望这是一个非常简单的,虽然经过大量的谷歌搜索后,我无法解决这个问题.
我正在使用MVC 3在购物车网站上工作,并使用代码优先的实体框架.我发送的模型是Product对象列表,每个对象都包含以下属性:
[Required(ErrorMessage = "This is a required field.")]
[DataType(DataType.Currency)]
[Range(1.00, 500.00, ErrorMessage = "Products can not be free.")]
[DisplayFormat(DataFormatString = "{0:C}")]
[DisplayName("Price")]
public double Price { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望DisplayFormat属性会导致视图中的以下行将值格式化为货币(item是循环中的产品对象):
@Html.DisplayFor(modelItem => item.Price)
Run Code Online (Sandbox Code Playgroud)
但这根本不适用格式化.到目前为止,我能够让它工作的唯一方法是使用它:
@String.Format("{0:C}", item.Price)
Run Code Online (Sandbox Code Playgroud)
但如果可能的话,我宁愿使用@ Html.DisplayFor,因为它设计用于处理nulls之类的东西.我知道它会是0或更多.事实上,通过验证它总是有一定数量 - 但我想确保在我继续之前没有更正确的方法.
任何有关这方面的信息将非常感谢!
UPDATE
达林回答并指出它确实有效,这让我回到了实际上发送给视图的地方.我意识到虽然我有一个名为ProductModel的类,它具有DisplayFormat属性,但我实际上正在返回另一个包含产品列表的模型.这叫做ProductListModel,我意识到它返回了Product数据类的列表 - 而不是ProductModel类!
所以最后它实际上非常简单.只是希望我没有浪费半个晚上.感谢鼓励我回去检查一下,达林!
c# asp.net-mvc linq-to-entities entity-framework data-annotations
我在其他地方读到DisplayFormat只是以与string.Format相同的方式使用DataFormatString.我试图显示一个长的电话号码; 在控制台应用程序中,以下工作:
const string PhoneFormat = "{0:###-###-####}";
long? phone = 8005551212;
string s = string.Format(PhoneFormat, phone);
Run Code Online (Sandbox Code Playgroud)
s ="800-555-1212"
为什么当我在我的视图中使用它时
@Html.DisplayTextFor(model => model.Patient.Phone)
Run Code Online (Sandbox Code Playgroud)
显示的是8005551212
这是模特......
public class Patient
{
[DisplayFormat(DataFormatString = "{0:###-###-####}")]
public long? Phone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
还试过DisplayFor,这也行不通.
似乎对我有用的唯一方法是
Html.Raw(string.Format("{0:###-###-####}", Model.Patient.Phone))
Run Code Online (Sandbox Code Playgroud) 我有一种复杂的模型.
我有我的UserViewModel,有几个属性,其中两个是HomePhone和WorkPhone.两种类型PhoneViewModel.在PhoneViewModel我有CountryCode,AreaCode和Number所有字符串.我想使CountryCode可选的,但AreaCode与Number强制性的.
这非常有效.我的问题是,这UserViewModel WorkPhone是强制性的,而HomePhone不是.
无论如何我可以通过在Require属性中PhoneViewModel设置任何属性来减少HomeWork属性吗?
我试过这个:
[ValidateInput(false)]
Run Code Online (Sandbox Code Playgroud)
但它只适用于类和方法.
码:
public class UserViewModel
{
[Required]
public string Name { get; set; }
public PhoneViewModel HomePhone { get; set; }
[Required]
public PhoneViewModel WorkPhone { get; set; }
}
public class PhoneViewModel
{
public string CountryCode { get; set; } …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc validationattribute data-annotations asp.net-mvc-3
我有以下代码工作
[Required(ErrorMessage = "Price is required.")]
[Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price xx.xx")]
public decimal? productPrice { get; set; }
Run Code Online (Sandbox Code Playgroud)
当提交页面时,Price = EMPTY字段错误消息为"需要价格".价格=超过9999错误消息是"价格xx.xx".
但是,当我输入'aaaa'时,错误消息是 "字段productPrice必须是数字".
如果键入不正确,我该如何更改消息?例如:"价格必须是1-9999之间的小数/数字.
----更新:---- 以下代码使用
NULL,非十进制,在范围之间,但不使用".1".
[Required(ErrorMessage = "Price is required.")]
[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Price must be a Numbers only.")]
[Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price must be a decimal/number between {1} and {2}.")]
public decimal? productPrice { get; set; }
Run Code Online (Sandbox Code Playgroud) 我试图让ID字段只读.它是数据库中的标识字段,因此用户不会设置它.但他们希望看到它.如果分配给a DataForm仍然允许该值被编辑,我在下面遗漏了什么.
public class StatusChoice : BindableBase
{
private int id;
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Editable(false,AllowInitialValue = false)]
public int ID
{
get { return id; }
set
{
id = value;
OnPropertyChanged();
}
}
}
Run Code Online (Sandbox Code Playgroud) jQuery Validation使验证电子邮件地址变得简单:
$("someForm").validate({
rules: {
SomeField: {
required: true,
email: true,
remote: {
type: "POST",
url: "CheckEmail"
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
这使得SomeField成为必需,必须格式化为电子邮件地址,并且还执行对CheckEmail操作的远程调用(检查重复项).
我喜欢让事情变得尽可能简单,所以我可以用Data Annotations做很多相同的事情:
public class RegisterModel {
[Required]
[Remote("CheckEmail", "Home", HttpMethod="POST")]
public string SomeField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ASP.net MVC 3/Data Annotations是否有内置/简单的方法来验证以确保电子邮件地址的格式正确?
如果可能的话,我希望它能产生不引人注目的javascript.
c# unobtrusive-javascript data-annotations unobtrusive-validation asp.net-mvc-3
以下是我试图定义外键关系的两个部分表.
public class Form
{
[Key, Column("FormID")]
public System.Guid FormGUID { get; set; }
[Column("PatGUID")]
public Nullable<System.Guid> PatientGUID { get; set; }
}
public class Patient
{
[Column("PatGUID")]
public System.Guid PatientGUID { get; set; }
[Key, Column("PatID")]
public int PatientID { get; set; }
Run Code Online (Sandbox Code Playgroud)
}
除了相关的信息,字段,导航等,我已经删除了所有这个例子; 希望不要太多.
我们有一个表格表格,其中FK为PatGUID带有字段的患者表格PatGUID.Patient表有一个PatIDint KEY字段.
我们要求为代码第一实体模型重命名字段; 此示例中需要更改的相关字段将更PatGUID改为PatientGUID.
我遇到的困难是尝试使用注释或流利来定义此外键.
所以我需要的最终结果是:
主要关键表:患者,字段:( PatGUID重命名为PatientGUID)
外键表:表格,字段:( PatGUID重命名为PatientGUID)
这似乎不应该构成一个大问题,但是Patient.PatGUID不是主键和PatGUID重命名的字段的组合PatientGUID没有使WCF数据服务能够正确地创建具有适当引用的引用,因此正确的选择/连接的:
SELECT … …Run Code Online (Sandbox Code Playgroud) 我希望能够这样做:
string email = "some@email.com";
bool isValid = IsValidEmail(email);
//returns true
Run Code Online (Sandbox Code Playgroud)
...但是使用Microsoft已经在EmailAddressAttribute中提供的逻辑.
IsValidEmail有数百个好的和坏的实现,当我可以使用微软已经考虑过的东西时,我不想添加自己的.按理说,他们会比我做得更好.
在最近的ASP.Net版本中,我们有System.ComponentModel.DataAnnotations,它为我们提供了优秀的EmailAddressAttribute,它允许我们像这样装饰我们的模型:
public class SomeModel
{
[EmailAddress]
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这个类是密封的,所以我不能调用EmailAddressAttribute.IsValid()
有没有一种好方法可以利用微软已经做过的事情?在.Net框架中的某个地方是否有一个方法,让我测试字符串对数据注释,我忽略了?
有点像......:
var emailChecker = new DataAnnotationsChecker<EmailAddressAttribute>();
string email = "some@email.com";
bool isValid = emailChecker.IsValid(email);
//returns true
Run Code Online (Sandbox Code Playgroud)
如果您无法想象为什么我会想要这个,请考虑获取一个List并想要检查哪些是有效的电子邮件.
data-annotations ×10
c# ×6
asp.net-mvc ×5
.net ×2
asp.net ×2
foreign-keys ×1
knockout.js ×1
telerik ×1