繁体   English   中英

MVC 4 C#.net 4 Razor控制器编辑Viewmodel空值

[英]MVC 4 C# .net 4 Razor Controller Edit Viewmodel null value

在我的Viewmodel中,我找到了为编辑链接传递的ID。 如果我使用该模型中的字段,那么如果该值为null,有时会报错,有时则不会。 我在同一字段nvarchar(100)和其他字段nchar(10)上遇到错误,但没有收到错误。 我不知道为什么,除了nchar(10)null被不同地对待之外?

        ViewBag.TimeRec = Time.Min + "-" + Time.Max +
            "-" + Time.Rate.ToString() + "-" +
            Time.Description.ToString().Trim();

Time.Min和Max均为null,在mssql DB表中,它们均为nchar(10),Description也为null nvarchar(100)。 当我更改它以测试Description并将其替换为包含“”的变量时,不会引发任何错误。

我做了搜索,找不到任何答案。 谢谢

在Null上执行.ToString()时会出现错误

采用 ?? (null-coalescing)运算符,以避免null引用异常

(Time.Description??"").Trim()

您可以在https://msdn.microsoft.com/zh-cn/library/ms173224.aspx中了解更多信息

我过去曾使用扩展方法来解决此问题。

public static string EmptyIfNull(this object value)
    {
        if (value == null)
            return "";
        return value.ToString();
    }

然后,您将可以执行以下操作:

Time.Description.EmptyIfNull()

您可能还需要考虑将这些字段的默认值设置为空字符串。 然后,您不必担心空值。

这是迁移的代码

AlterColumn("dbo.TableName", "ColumnName", c => c.String(nullable: false, maxLength: 60, defaultValue: ""));

您尚未包括从sql到C#的映射方式,但是作为一般情况,sql nchar [10]始终是10个字符的字符串,而nvarchar(10)最多是10个字符(包括null)。

这解释了nullable-nchar与nullable-nvarchar之间的区别

您可以使用null-coalescing运算符(根据其他答案),也可以添加字符串扩展名,例如:

public static class StringExtensions
{
    public static string TrimNull(this string value)
    {
        if (value == null) return string.Empty;
        return value.Trim();
    }
}

[名称适当,如果为TrimOrEmptyIfNull(以匹配类似的CLR IsNullOrWhiteSpace)]

然后使用... + Time.Description.TrimNull() + ...

我可能会直接在映射中修复此问题,而不是迫使UI开发人员每次都记住这一点。

我直接使用MVC4中模型的值。 我知道虽然测试为空。 在纯.net中(至少对于VB而言),我一直能够使用.ToString(),并且它将null转换为空格。 现在我知道测试null是否没有问题,我只想确保nchar和nvarchar的处理方式有所不同。 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM