在我的 ASP.NET MVC4 应用程序中保存实体时,我遇到了 (2) 个字段的问题:
- 电子邮件
- 电话
@
如您所知,这些字段通常会有特殊字符-
。这是我的控制器代码,使用 ValueInjecter 通过模型绑定从水合对象注入我的模型类:
public ActionResult Create(TestViewModel testViewModel)
{
using (var context = new MyEntities())
{
var person = new Person();
person.InjectFrom(testViewModel);
context.Person.AddObject(person);
context.SaveChanges();
}
}
我得到的错误如下:
“字符串或二进制数据将被截断。语句已终止”
好吧,乍一看,您可能会说这是 SQL 中字段的大小,但真正的问题是因为这些特殊字符而被伪装。如果我在字段中输入以下内容:
电话:11234565454514564561
邮箱:blahblahblahblah
...然后一切正常。
但是,如果我输入:
电话:123-456-7890
电子邮件:test@wow.com
我收到有关“字符串或二进制数据将被截断”的错误。所以我找到了一种解决方法,但这似乎完全没有必要,而且可能是错误的方式。如果我使用 C# 转义字符将模型绑定对象中的值显式映射到实体,那么我的值将插入如下所示:
public ActionResult Create(TestViewModel testViewModel)
{
using (var context = new MyEntities())
{
var person = new Person();
person.InjectFrom(testViewModel);
//Explicitly map items preserving special charachters
person.EmailAddress = @testViewModel.EmailAddress;
person.Phone = @testViewModel.Phone;
context.Person.AddObject(person);
context.SaveChanges();
}
}
好吧,老实说,我不知道罪魁祸首在哪里。这是 MVC 模型绑定问题、实体框架问题、C# 交易还是 ValueInjecter?我尝试在我的 ViewModel 属性上使用注释来指示数据类型,例如Phone
and ,Email
但这并没有阻止问题。只有通过转义这些字符在代码中明确是一种方法。
我做错了什么,因为我知道带有特殊字符的电子邮件和电话等字段一直保存到带有 MVC 的 EF 中?每次我有一个带有特殊字符的值时,我能做些什么来避免在这些代码行中添加这些代码?
谢谢!!