MVC将两个值比较到模型中
本文关键字:比较 模型 两个 MVC | 更新日期: 2023-09-27 18:20:38
我在asp.net中有一个mvc应用程序。在我的C#模型中,我需要比较两个值,然后如果其中一个大于另一个,则显示一条消息。这是可以实现的吗?我是整个c#mvc应用程序的工程师
[UIHint("ValuesModel")]
public ValuesModel LowValue { get; set; }
[UIHint("ValuesModel")]
public ValuesModel HighValue { get; set; }
我需要每次都能将LowValue设置得更小,如果不是这样的话,显示错误消息,我还需要在那之后通过css设置最高值的样式,所以我猜我可能可以传递一个类或其他东西,这样我就可以通过javascript访问它(我以前在php中这样做)。请帮帮我,我陷入了困境。
您可以使用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; }
创建一个名为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
{
//...
}
请记住包含Infrastructure命名空间。
您可以使用DataAnnotations
命名空间中的属性。它具有Compare
属性。用法:[Compare("Field name to compare with", ErrorMessage = "Your Error Message")]