我试图在视图上显示错误消息.能否建议我采取正确的方法来做到这一点.我正在考虑动态添加数据注释,但找不到任何解决方案.
谢谢
[HttpPost]
public ActionResult AddBook(BooksModel booksModel)
{
try
{
booksModel.Account = _bookRepository.BookDetails(booksModel.Title,booksModel.RefCode, booksModel.DontHaveRefCode);
}
catch (FaultException faultException)
{
switch (faultException.Code.Name)
{
case "exc1":
// Show Error Message Here
return View("AddBook", booksModel);
default:
break;
}
}
return View("ConfirmBook", booksModel);
}
Run Code Online (Sandbox Code Playgroud) 我有模特财产:
public int? RegionId { get; set; }
Run Code Online (Sandbox Code Playgroud)
我在视图中创建下拉列表:
@Html.DropDownListFor(m => m.RegionId, Model.Regions)
Run Code Online (Sandbox Code Playgroud)
在html中:
<select data-val="true" data-val-number="The field RegionId must be a number."
</select>
Run Code Online (Sandbox Code Playgroud)
我需要删除属性data-val-number,因为在特定情况下它不适合我.
我在Application_Start中尝试:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Run Code Online (Sandbox Code Playgroud)
另请注意,RegionId可以为空.
如何在服务器端代码中删除此属性?(不是javascript)
我正在使用RegularExpressionAttribute验证属性.该物业需要允许anything but zero length string, null, or (just) spaces.我正在使用的正则表达式是"^(?!^ *$)^.+$".
如果值为null或an empty string,则RegularExpressionAttribute.IsValid始终返回true但我认为它应该为false(只有空格才能正常工作).
我不是正则表达式专家,但我相信表达式是正确的(如果我使用Regex.IsMatch空字符串直接从我的代码验证正则表达式返回false - 如预期的那样).这是RegularExpressionAttribute的问题吗?
(我知道在这种情况下,RequiredAttribute通常是一个快速但不是一个选项)
更新:
为了消除任何歧义,这里有一小段测试代码来演示:
public class MyValueTester
{
// internal const string _REGEX_PATTERN = "^(?!\\s*$).+$";
// internal const string _REGEX_PATTERN = @"^(?!\s*$)";
internal const string _REGEX_PATTERN = @"[^ ]";
public MyValueTester()
{
ProperValue = "hello";
NullValue = null;
SpaceValue = " ";
LeadingSpaceValue = " hi";
EmptyValue = "";
}
[RegularExpression(_REGEX_PATTERN, …Run Code Online (Sandbox Code Playgroud) 我已经看到术语"好友类"用作"如何在另一个文件中为部分类添加注释"之类的问题的"答案",但这些答案假设我知道Buddy类是什么,并且代码示例假设我理解这是如何工作的原因.
我无法看到C#中的伙伴类是什么的简单解释,以及它如何/为什么允许我修改现有类,例如向属性添加注释.
在我的ASP.NET Core 1.1.1应用程序中,模型验证不起作用。我注意到一些默认值views(例如login.cshtml,Register.cshtml在创建VS2017应用程序时创建的)在末尾具有以下代码。但这些默认视图实际上是局部视图。我的视图不是局部视图,是否也应将以下内容添加到我的末尾views?或者我应该在不是部分视图的视图末尾添加什么:
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
Run Code Online (Sandbox Code Playgroud) 当我尝试采用Clean Architecture 时,我想摆脱数据注释并使用Fluent API,就我个人而言,我开始更喜欢它。
但是,我不太擅长这种实现方式。
我之前所做的是使用Range注释为数字属性指定最小值和最大值,如下所示:
public class Engine
{
...
[Range(0, 10000)]
public int Size { get; set; }
[Display(Name = "Horse power")]
[Range(0, 1000)]
public int HorsePower { get; set; }
[Display(Name = "Top speed")]
[Range(0, 500)]
public int? TopSpeed { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试在与实体关联的Configuration类中编写验证代码Engine。
该实体类:
public class Engine
{
public int EngineId { get; …Run Code Online (Sandbox Code Playgroud) c# data-annotations entity-framework-core asp.net-core clean-architecture
ASP.NET MVC Core 中的允许值是否有任何数据注释?由于 SQL 服务器中没有枚举,因此我无法将包含枚举字段的类迁移到数据库。我想为班级中的字段提供可能/允许的值。有没有办法做到这一点?
public class Employee
{
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想提供Active和Inactive作为 Status 字段的唯一可能值。
我正在尝试在 ASP.net MVC 应用程序之外使用 DataAnnotation 属性验证。理想情况下,我想在我的控制台应用程序中采用任何模型类并将其装饰如下:
private class MyExample
{
[Required]
public string RequiredFieldTest { get; set; }
[StringLength(100)]
public int StringLengthFieldTest { get; set; }
[Range(1, 100)]
public int RangeFieldTest { get; set; }
[DataType(DataType.Text)]
public object DataTypeFieldTest { get; set; }
[MaxLength(10)]
public string MaxLengthFieldTest { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后(伪)做这样的事情:
var item = new MyExample(); // not setting any properties, should fail validation
var isValid = item.Validate();
Run Code Online (Sandbox Code Playgroud)
我在网上的一个示例中找到了这段代码:
var item = new MyExample(); // not setting any …Run Code Online (Sandbox Code Playgroud) 据我了解,值类型隐式具有[Required]属性 whenMvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes设置为false。但坦率地说,当我在两者之间切换时,我看不出有什么区别。
此外,如果我[Required]在不可空类型(例如 an )上显式使用该属性int,则需要我设置其值,而不是仅在没有给定int参数的情况下命中端点,该参数将为其类型分配默认值- 0.
所以,总结一下:
如果它隐式添加[Required]属性,为什么显式变体提供完全不同的功能?
启用/禁用有任何功能差异吗MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes?据我所知,它没有改变任何东西。
c# model-view-controller model-validation data-annotations asp.net-core
我有以下ViewModel(只显示一些易于阅读的属性)
public class Contract{
public string Name {get; set;}
public ContractTerm PrpTerm { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
PRP Term模型就是这样的
public class PrpTerm{
public int Id {get; set;}
public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
对于我的模型验证,我正在使用XML文件来注入注释.我已经Name根据需要设置了属性,我ContractTerm没有指定任何验证(它是列表中的可选字段).我的观点是名称的文本框和合同条款的选择列表.
当我试图保存时,我将该ModelState.IsValid属性视为false,表示该PRPTerm.Id值是必需的.据我所知,因为我们无法为int赋值空值.
有人知道一种方法可以避免这种情况得到验证吗?
我尝试过使用Bind(Exclude annotation,但这会从数据提交中删除该字段,这不允许我获取用户选择的值(如果发生这种情况).我无法在PrpClass上将id设置为可为空另一个选项是在ViewModel上设置PrpTerm Id,但我需要用有效的理由来证明这种改变.
任何的想法?
data-annotations ×10
c# ×6
asp.net-mvc ×4
validation ×4
asp.net-core ×3
razor ×2
.net ×1
asp.net ×1
buddy-class ×1
modelstate ×1
regex ×1