我在我的ASP.NET應用程序MVC4保存實體時具有(2)領域的問題,特殊字符字段時:錯誤節省了與使用的EntityFramework和MVC ModelBinding
- 電子郵件
- 電話
如您所知,這些字段通常會包含特殊字符@
和-
。下面是一個使用ValueInjecter以將來自脫水對象我的模型類我從控制器代碼通過模型綁定:
public ActionResult Create(TestViewModel testViewModel)
{
using (var context = new MyEntities())
{
var person = new Person();
person.InjectFrom(testViewModel);
context.Person.AddObject(person);
context.SaveChanges();
}
}
我正的錯誤是:
「字符串或二進制數據將被截斷。該語句已終止 」
1日一眼好吧,你可以說這是在SQL中的字段的大小,但真正的問題是,因爲這些特殊charachters的僞裝。如果我輸入的字段如下:
電話:11234565454514564561
電子郵件:blahblahblahblah
......然後一切工作。
但是如果我輸入:
電話:123-456-7890
電子郵件:[email protected]
我得到了 「字符串或將被截斷的二進制數據」 的錯誤。所以我找到了解決辦法,但這似乎完全沒有必要,可能是錯誤的方法。如果我明確地映射從模型綁定對象到實體值,使用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
和Email
,但這並沒有阻止這個問題。只有在逃避這些角色的情況下,通過在代碼中明確表達纔是做到這一點的一種方式。
我做錯了什麼,因爲我知道字段像電子郵件和具有特殊字符的電話一直保存到EF與MVC?我可以做些什麼來防止每次有特殊字符的價值時都要在這些代碼行中加入?
謝謝!
_「使用C#轉義字符」_ - nope,僅當將[@]應用於[逐字符字符串文字]時(http://msdn.microsoft.com/zh-cn/library/362314fe.aspx) ('@「C:\ Foo.bar」'),或者當您想使用[關鍵字作爲標識符](http://msdn.microsoft.com/zh-cn/library/x53a06bb)('string @ string' )。在變量名前加一個「@」對該變量的內容沒有任何作用。請運行SQL Profiler並查看發送到服務器的查詢。 – CodeCaster 2012-08-09 15:23:01
什麼是電子郵件和電話的數據類型 – swapneel 2012-08-09 15:26:48
' '' ' –
atconway
2012-08-09 15:27:23