我正在使用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) 如果您将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语法.
是否可以从继承的属性中删除属性?我认为通过使用新关键字,我可以这样做......
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)
......但这根本不起作用.这让我感到惊讶,因为新的特别是隐藏继承的成员.
我有这样的模特
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) 我有一个带有数据注释的模型,我是一个使用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
我试图在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
在标准应用程序中,我有以下内容:
[Required]
[DisplayName("Email Address")]
public string EmailAddress { get; set; }
Run Code Online (Sandbox Code Playgroud)
...这反过来会自动生成一个英文表格字段的标签.
现在,如果我需要我的应用程序支持5种语言,那么ASP.NET MVC应用程序处理此问题的最佳方法是什么?
适用范围约为400-600个数据字段.
更新:我还需要支持更新应用程序中的小部分文本,如页面名称和每个表单的引入(小段落).
说我有以下型号:
[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通过使用属性,数据注释或模型中的某些内容向列添加索引?
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) 我正在更改创建表单以成为模式对话框和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
data-annotations ×10
c# ×5
asp.net-mvc ×4
.net ×3
asp.net ×1
f# ×1
indexing ×1
knockout.js ×1
multilingual ×1
orchardcms ×1