から編集します。新しいビューを作成し、テンプレートの編集を選択すると、テンプレートは編集不可能な主キー用のテキストボックスを作成します。企業ID = 0は、そう何の編集は行われませんしたコントローラにポストされ、コレクション:ASP.Net MVC単純なデータをデフォルトテンプレート
<%=Html.TextBox("CompanyID", Model.CompanyID)%>
ので、ビューからコントロールを削除、問題が発生します。 しかし、そのコード行を表示すると、投稿されたコレクションのCompanyIDに適切な値が設定されます。私はこのチュートリアルのようにやっています: http://www.asp.net/learn/mvc/tutorial-21-vb.aspxとそこにある(リスト6 - Controllers \ HomeController.vb(Edit methods)セクションの上のグレーのボックス)、コントロールを削除することができますが、 ?
更新 [OK]を、より多くの説明のために、ここでは2つの問題行く:このコードで
問題1:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal movieToEdit As Movie) As ActionResult
ビュー movietoeditでMOVIEIDからMOVIEIDテキストボックスを削除する場合をコレクションは常にゼロであるので、asp.netウェブサイトの教科書はうまくいきません!私はビューからMOVIEIDを削除したい場合は、私はこのように私のコントローラにIDを渡す必要があります:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal ID as integer,ByVal movieToEdit As Movie) As ActionResult
今私は...何の問題のthatsませんが、それはいくつかの回に私を取り、このIDを使用してモデルを照会することができます私がウェブサイトからステップバイステップで行っていたように、考え出した!
問題2だから、どのようにでも隠されたテキストボックスに、ビューのMOVIEIDを使用せずに編集を行うには?
私は私のコントローラとしてこれを使用しています:
<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
(Enityフレームワークを使用して)そして、私は私のビュー(テキストボックスまたは隠しフィールド)から企業IDを削除した場合、それはc.EntityKey.EntitySetNameから私は、このエラーを与える:
ObjectStateManagerには、 'Companies.Company'タイプのオブジェクトへの参照を含むObjectStateEntryが含まれていません。
と私は
<%= Html.TextBox("CompanyName", Model.CompanyName) %>
のようなものを追加する場合、それは正常に動作します..私は混乱しています!
注:IDを渡すとのUpdateModelを介して特定のフィールドを更新する場合は、...
私の場合は、 – mohamadreza