MVC3vb.netアプリケーションに問題があります。コントローラに加えた変更を投稿しようとすると、モデルがコントローラに送信されません。
私はこれやこれのような多くの投稿をフォローしようとしましたが、モデルがIEnumerable型を送信しなかったため、アプリケーションにそれらを実装する方法がわかりません。
最後に、モデルがデータベースに保存する値であるバッチごとに1つの値を返すことだけが必要です。
モデルを投稿してコントローラーに送信しようとすると、ページから次の投稿が送信されます。
Client=2&Datacenters=20&BatchesForAssignation[0].CenterID=4&BatchesForAssignation[1].CenterID=20&BatchesForAssignation[1].DatacenterID=14...
しかし、このクエリ文字列をBatchesForAssignationオブジェクトに変換し、モデルに割り当ててコントローラーに送信する方法がわかりません。
注:クエリ文字列に表示されるクライアントとデータセンターの値は、コントローラーでは使用されません。BatchesForAssignation[n].CenterID部分が必要です。
これに関する解決策を見つけるために私に指摘してもらえますか?
これは、MVCアプリケーション(コード圧縮)で使用しているオブジェクトです。
バッチ:
Public class Batch
public property ID as integer
public property CenterID as integer
public property name as string
end class
センター(このオブジェクトは、バッチに割り当てられるセンターのすべてのリストを格納するだけです。名前は、ドロップダウンリストに名前を表示するためだけのものです):
Public class Center
public property ID as integer
public property name as string
end class
(CollectionBaseから継承されたコレクションとして機能するBatchlistオブジェクトとCenterlistオブジェクトもあり、すべてのBatchオブジェクトとCenterオブジェクトを格納します。クラス定義が必要な場合はお知らせください。ただし、かなり簡単です)。
モデルは以下の通りです
Public class ProcessingModel
public property BatchesForAssignation as BatchList
public property Datacenters as CenterList
End class
コントローラは次のとおりです。
<HttpGet()>
<Authorize()> _
Public Function AssignToDataCenters() As ActionResult
Dim model As New ProcessingModel
Dim BatchHandler As New BatchControl
'This line will get the list of batches without datacenter
model.BatchesForAssignation = BatchHandler.GetBatchesAvailable(ConnectionString)
'This method will get the list of Datacenters available
model.Datacenters=BatchHandler.GetDatacenters(ConnectionString)
return View(model)
End Function
HttpPost(モデルが空のモデルを返すため、これは実際には機能しません):
<HttpPost()>
<Authorize()> _
Public Function AssignToDataCenters(ByVal Model as ProcessingModel) As ActionResult
Dim BatchHandler As New BatchControl
Dim SaveResult as Boolean=false
'This line will get the list of batches without datacenter
model.BatchesForAssignation = BatchHandler.GetBatchesAvailable(ConnectionString)
'This method save the information returned by the model
SaveResult=BatchHandler.UpdateBatches(model)
ViewBag("Result")=SaveResult
Return View(model)
End Function
ビューは次のとおりです(強く型付けされたビューです)。
@ModelType MVCAdmin.ProcessingModel
@Code
ViewData("Title") = "Assign Batches To centers"
End Code
@Using Html.BeginForm()
@<table id="tblAvailableBatches">
<thead>
<tr>
<th>Assign batch to:</th>
<th>Name</th>
</tr>
</thead>
<tbody>
@code
For i As Integer = 0 To Model.BatchesForAssignation.Count - 1
Dim a As Integer = i
@<tr>
<td>@Html.DropDownListFor(Function(m) m.BatchesForAssignation(a).CenterID, New SelectList(Model.Datacenters, "ID", "name", model.BatchesForAssignation(i).CenterID), " ")</td>
<td>@Model.BatchesForAssignation(i).name</td>
</tr>
Next
End Code
</tbody>
</table>
<input type="button" value="Apply changes" id="btnApply" />
End Using
前もって感謝します
更新2012-06-14:
request.Form
いくつかの再調査を行った後、ビューによって送信された結果を解析できることを使用して、コントローラーでクエリ文字列を解析できることがわかりました。ただし、クエリ文字列キーは、、などの形式にBatchesForAssignation[0].CenterID
なっています。BatchesForAssignation[1].CenterID
BatchesForAssignation[2].CenterID
モデルがクエリ文字列を解析し、解析されたオブジェクトをコントローラーに送信するように、これを「自動的に」行うためのより良い方法はありますか?
もう一度...よろしくお願いします