如何在ASP.NET MVC视图中检查Integer类型字段的空值?

时间:2009-04-02 13:28:29

标签: asp.net-mvc

我在数据库中有整数类型字段,其属性为“Not Null”。

当我创建一个视图&进行验证,如果我将该字段留空,则将其视为0,因此我无法将其与0进行比较,因为如果有人插入值0则会将其视为错误!

另一个问题是我正在使用模型错误,如“ASP.NET MVC 1.0”@ Scott Gu博客中所述。我正在检查部分对象类(由LINQ-To-SQL创建)中的值。即

public partial class Person
{
    public bool IsValid
    {
        get { return (GetRuleViolations().Count() == 0); }
    }
    public IEnumerable<RuleViolation> GetRuleViolations()
    {
        if (String.IsNullOrEmpty(Name))
            yield return new RuleViolation("Name is Required", "Name");
        if (Age == 0)
            yield return new RuleViolation("Age is Required", "Age");
        yield break;
    }
    partial void OnValidate(ChangeAction action)
    {
        if (!IsValid)
            throw new ApplicationException("Rule violations prevent saving");
    }
}

范围也有问题。

就像在数据库中一样,如果我声明为smallint,即c#中的short,现在如果我超出该范围,那么它会给出错误,因为“需要一个值”。

所以最终有没有最好的ASP.NET MVC验证方法?

4 个答案:

答案 0 :(得分:1)

您可以使用可空类型更改代码吗?

    Dim i As Nullable(Of Integer)


    MsgBox(i.HasValue)
    'result is false

    i = 1
    MsgBox(i.HasValue)
    'result is true

    i = Nothing
    MsgBox(i.HasValue)
    'result is false

答案 1 :(得分:0)

我不是很了解MVC的细节,但是有没有办法将age的默认值更改为-1?通过这种方式,您可以查看值,人们仍然可以输入0。

另一种解决方案可能是使用可空的int。你可以通过添加一个?到了类型。

HTH。

乔纳森

答案 2 :(得分:0)

我会先在客户端验证表单。如果年龄为0,则让用户知道它不是有效年龄。在服务器上更改消息,这是误导性的:

if (Age == 0)
    yield return new RuleViolation("0 years is not a valid age", "Age");

我知道,因为你从Person实体绑定到一个模型属性,它将0作为默认值 - 为什么你不在数据库中更改它?将数据库中的默认值设置为您认为对用户年龄合理的值,以便新实体不再显示为0.

如果您不想更改db值,请在加载时使用jQuery将文本框值设置为“创建”页面上的空字符串。如果用户尝试提交此类表单,您可以在客户端上检查以禁止它,并且在服务器上您不必执行任何操作,用户将收到“需要A值”消息。

顺便说一下,你写道:

  

我无法将其与0进行比较,因为如果   有人插入一个值0然后它会   被视为错误

我没有在这个特定的域模型中看到问题。你认为0岁是不是一个好的价值?问问自己。

答案 3 :(得分:0)

使用Utilities.GetNullableInt32(textbox1.Text.Trim());

进行检查

如果您使用此GetNullableInt32()函数检查,如果用户输入值“0”,则会在表格中保存为NUll