2013-11-15 92 views
0

我在這裏查看了很多類似的問題,但沒有人能夠解決我們的問題或解釋爲什麼這可能會發生。傳入字典的模型項目類型爲「System.Guid」,但此字典需要類型爲「System.String」的模型項目

我們從現有的數據庫創建了一個EDMX,並使用MVC 4腳手架爲我們自動生成控制器和視圖。索引頁是好的,但是當我們選擇一個實體來編輯時,會拋出這個錯誤。我們的解決方案中沒有自定義編輯器,也不是部分頁面更新。

的編輯頁面控制器代碼是這樣的:

public ActionResult Edit(int id = 0) 
{ 
    MessageProfile messageprofile = db.MessageProfiles.Find(id); 
    if (messageprofile == null) 
    {  
     return HttpNotFound(); 
    } 
    return View(messageprofile); 
} 

上Edit.cshtml模型聲明是

@model Web.UI.Areas.Admin.Models.MessageProfile 

和誤差在

@Html.EditorFor(model => model.APIKey) 

拋出的EDMX將APIKey作爲GUID,生成的模型類將APIKey作爲模型,EditorFor表示它是一個當我們將其懸停在代碼上時,它就是一個GUID的編輯器。我們完全陷入了一個字符串進入過程的地方。感謝任何幫助。

+0

嘗試創建自己的'GUIEditor.cshtml'和'EditorFor(型號「GUIEditor叫它「)' –

+0

你能告訴我們如何定義'MessageProfile'嗎? –

回答

0

經常使用ASP.NET動態數據,我的期望是編輯器已經存在於MVC腳手架中的每個基本類型。沒有,並且試圖做一個隱式轉換。當失敗時,通常會拋出這個錯誤。

在這種情況下,簡單的解決方案是使用Html.TextBoxFor而不是Html.EditorFor。這是一個奇怪的案例,但價值正在通過電子郵件粘貼。在其他情況下,我們通過查找和下拉列表使表單更好。

如果我們想要一個GUID特定的編輯器,我們將不得不創建我們自己的。我們所有的結果都是一個文本框,所以這就是爲什麼第一個解決方案是最簡單的。

0

這也發生在我身上。對我而言,問題在於我創建了自定義的Editfor模板,並且沒有爲System.Guid添加一個。因爲它可以找到一個匹配system.Guid它會嘗試使用系統。因此產生該錯誤的字符串。

如果這是你的EditorTemplates的情況下文件夾中添加一個名爲的Guid CSHTML,然後添加以下:

@model System.Guid 
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue) 
相關問題