創建新視圖並選擇編輯模板時,模板將爲不可編輯的主鍵創建一個文本框。ASP.Net MVC簡單編輯默認模板中的數據
<%=Html.TextBox("CompanyID", Model.CompanyID)%>
所以,從視圖刪除控制,將導致此問題:這是後到控制器已經在CompanyID = 0,所以沒有編輯會做的集合。 但是,如果我放回要查看的代碼行,發佈集合中的CompanyID具有適當的值。我正在做的很像這個教程: http://www.asp.net/learn/mvc/tutorial-21-vb.aspx,並在那裏(灰色方塊「清單6 - 控制器\ HomeController.vb(編輯方法)」部分上方)它說你可以刪除控件,但它不工作..任何建議?
更新 好了,更多的解釋,在這裏不用2個問題:
問題1在這個代碼:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal movieToEdit As Movie) As ActionResult
如果從視圖在movietoedit的movieid刪除MovieID文本框集合總是零,所以從asp.net網站tutortial不會工作!如果我想刪除鑑於movieID,我不得不ID傳遞給我的控制器是這樣的:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal ID as integer,ByVal movieToEdit As Movie) As ActionResult
現在我可以用這個型號ID查詢..那是沒有問題的,但它需要我一些時間來搞清楚,正如我一步一步從網站上做的一樣!
問題2所以,怎麼辦在沒有使用movieID的情況下編輯,甚至在隱藏的文本框?
我用這作爲我的控制器:(使用Enity框架)
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal id As Integer, ByVal collection As Company) As ActionResult
If Not ModelState.IsValid Then
Return View()
End If
Try
Dim c = _db.CompanySet.FirstOrDefault(Function(m) m.CompanyID = id)
If c Is Nothing Then
Return RedirectToAction("index")
End If
_db.ApplyPropertyChanges(c.EntityKey.EntitySetName, collection)
_db.SaveChanges()
Return RedirectToAction("Index")
Catch ex As Exception
Throw ex
End Try
End Function
如果我從我的觀點(文本或隱藏字段)刪除CompanyID它會給我從c.EntityKey.EntitySetName這個錯誤:
ObjectStateManager不包含引用「Companies.Company」類型對象的ObjectStateEntry。
如果我添加類似
<%= Html.TextBox("CompanyName", Model.CompanyName) %>
它將很好地工作。我很困惑!
注:我檢查代碼的10倍以上,我不知道是否有什麼我做錯了或教程是錯的..
請看這個問題,它在我的情況下更新 – mohamadreza 2009-05-05 10:04:35