我在asp.net中有一个mvc应用程序。在我的C#模型中,我需要比较2个值,然后如果一个比另一个大,则显示一条消息。这是否可以实现,我是整个c#mvc应用程序的开销者
[UIHint("ValuesModel")]
public ValuesModel LowValue { get; set; }
[UIHint("ValuesModel")]
public ValuesModel HighValue { get; set; }
我需要能够将LowValue设置为每次都更小,如果不是这样的情况显示错误消息,我也需要在css之后设置最高的值,所以我猜我也许可以通过课程或所以我可以通过javascript访问它(我曾经在PHP中这样做)。请帮助我,我坚持这个。
答案 0 :(得分:1)
您可以使用由Jaroslaw Waliszko开发的非常简单且非常简洁的ExpressiveAnnotations JS库。有关详细信息,请点击此链接至https://github.com/jwaliszko/ExpressiveAnnotations。该库允许您执行不同的条件验证。与Foolproof类似,它通过添加NuGet包添加到Visual Studio环境中。添加后,在模型中使用ExpressiveAnnotations.Attributes添加using语句;然后只需使用AssertThat声明来完成您的需要。例如:
[UIHint("ValuesModel")]
public ValuesModel LowValue { get; set; }
[UIHint("ValuesModel")]
[AssertThat("HighValue > LowValue", ErrorMessage = "Insert your error message here")]
public ValuesModel HighValue { get; set; }
答案 1 :(得分:0)
创建一个名为Infrastructure的文件夹(与视图,控制器等级别相同)。
添加一个新类LowHighCheck.cs
使用以下代码创建自己的验证属性:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Web;
namespace YourNamespace.UI.Infrastructure
{
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class LowHighCheck : ValidationAttribute
{
private string[] PropertyList { get; set; }
public LowHighCheck(params string[] propertyList)
{
this.PropertyList = propertyList;
}
public override object TypeId
{
get
{
return this;
}
}
public override bool IsValid(object value)
{
// integers for an example - if complex objects you'll need to
// perform some more operations to compare them here
int low = (int)PropertyList.GetValue(1);
int high = (int)PropertyList.GetValue(2);
if (high < low)
{
return false;
}
return true;
}
}
}
使用属性
装饰您的模型[LowHighCheck("LowValue", "HighValue", ErrorMessage = "your error message")]
public class YourViewModel
{
//...
}
请记住包含基础结构命名空间。
答案 2 :(得分:0)
您可以使用DataAnnotations
命名空间中的属性。它具有Compare
属性。用法:[Compare("Field name to compare with", ErrorMessage = "Your Error Message")]