MVC将2个值与模型进行比较

时间:2015-11-04 08:48:41

标签: c# asp.net asp.net-mvc

我在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中这样做)。请帮助我,我坚持这个。

3 个答案:

答案 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")]