MVC 4 C#.net 4 Razor控制器编辑Viewmodel空值
在我的Viewmodel中,我查找传递给编辑链接的id。如果我使用该模型中的字段,如果值为null,有时会出现错误,有时则不会。我在同一个字段nvarchar(100)和其他字段nchar(10)上得到一个错误,我没有得到这个错误。我不知道为什么,除了nchar(10)空值可能被区别对待之外MVC 4 C#.net 4 Razor控制器编辑Viewmodel空值,c#,sql-server,asp.net-mvc,asp.net-mvc-4,razor,C#,Sql Server,Asp.net Mvc,Asp.net Mvc 4,Razor,在我的Viewmodel中,我查找传递给编辑链接的id。如果我使用该模型中的字段,如果值为null,有时会出现错误,有时则不会。我在同一个字段nvarchar(100)和其他字段nchar(10)上得到一个错误,我没有得到这个错误。我不知道为什么,除了nchar(10)空值可能被区别对待之外 ViewBag.TimeRec = Time.Min + "-" + Time.Max + "-" + Time.Rate.ToString() + "-" +
ViewBag.TimeRec = Time.Min + "-" + Time.Max +
"-" + Time.Rate.ToString() + "-" +
Time.Description.ToString().Trim();
Time.Min和Max都是null,在mssql DB表中它们是nchar(10),描述也是null nvarchar(100)。当我将其更改为测试描述,然后将其替换为包含“”的变量时,不会引发任何错误
我搜索了一下,没有找到任何答案。谢谢当您执行此操作时会出现错误。空值上的ToString()使用??(空合并)运算符以避免空引用异常
(Time.Description??"").Trim()
你可以在
我过去曾使用扩展方法来解决这个问题
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) 这解释了可空nchar与可空nvarchar之间的区别 您可以使用空合并运算符(根据其他答案),也可以添加字符串扩展名,例如:
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中模型的值。不过我知道测试null。在straight.net中(至少在VB中),我始终能够使用.ToString()并将null转换为空格。我测试null没有问题,现在我知道了,只是想确保nchar和nvarchar的处理方式不同。谢谢