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中这样做)。请帮帮我,我陷入了困境。

MVC将两个值比较到模型中

您可以使用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")]