私はASP.NETMVC3でWebアプリケーションを開発しています(私の最初の)は、私が働いているエンジニアリング会社のデータ処理ステップを追跡することを意味します。
以下は、ドメインモデルの一部です。
データセット:
Partial Public MustInherit Class Dataset
Public Property DatasetID As System.Guid
Public Property Name As String
Public Overridable Property ProcessDatasets As ICollection(Of ProcessDataset) = New HashSet(Of ProcessDataset)
Public Overridable Property DeliveryBatches As ICollection(Of DeliveryBatch) = New HashSet(Of DeliveryBatch)
End Class
プロセス:
Partial Public Class Process
Public Property ProcessID As System.Guid
Public Property Name As String
Public Property Type As String
Public Property Description As String
Public Property SOP As String
Public Property ProcessOrder As Nullable(Of Integer)
Public Overridable Property ProcessDatasets As ICollection(Of ProcessDataset) = New HashSet(Of ProcessDataset)
End Class
ProcessDataset :(属性付き結合テーブル)
Partial Public Class ProcessDataset
Public Property ProcessID As System.Guid
Public Property DatasetID As System.Guid
Public Property OwnerID As Nullable(Of System.Guid)
Public Property Started As Nullable(Of Date)
Public Property Completed As Nullable(Of Date)
Public Overridable Property Dataset As Dataset
Public Overridable Property Process As Process
Public Overridable Property ProcessOwner As ProcessOwner
End Class
私の目標は、(ドメインモデルを使用して)データセットのインデックスビューまたは詳細ビューから1つ以上のデータセットを選択し、Add New Process to Dataset(s)
この目的の作成ビューを開くリンクをクリックすることです。[作成]ビューによって作成されたProcessDatasetは、ユーザーがリストから選択しなくても、選択したデータセットを自動的に参照します。
以下は、ProcessDataset用に作成したViewModelです。
ProcessStatusDataset:
Public Class ProcessStatusDataset
Public Property ProcessDataset As ProcessDataset
Public Property Datasets As IEnumerable(Of Dataset)
End Class
ProcessDatasetControllerのコントローラーメソッド:
'
' GET: /ProcessDataset/Create
Function CreateProcessStatus(id As Guid) As ViewResult
Dim processStatus As New ProcessStatusDataset
processStatus.Datasets = db.Datasets.Where(Function(d) d.DatasetID = id)
ViewBag.ProcessID = New SelectList(db.Processes, "ProcessID", "Name")
ViewBag.OwnerID = New SelectList(db.ProcessOwners, "ProcessOwnerID", "Name")
Return View(processStatus)
End Function
'
' POST: /ProcessDataset/Create
<HttpPost()>
Function CreateProcessStatus(processstatusdataset As ProcessStatusDataset) As ActionResult
If ModelState.IsValid Then
For Each dataset In processstatusdataset.Datasets
Dim processdataset As New ProcessDataset
processdataset.ProcessID = processstatusdataset.ProcessDataset.ProcessID
processdataset.OwnerID = processstatusdataset.ProcessDataset.OwnerID
processdataset.Completed = processstatusdataset.ProcessDataset.Completed
processdataset.Started = processstatusdataset.ProcessDataset.Started
processdataset.DatasetID = dataset.DatasetID
db.ProcessDatasets.Add(processdataset)
Next
db.SaveChanges()
Return RedirectToAction("Index")
End If
ViewBag.ProcessID = New SelectList(db.Processes, "ProcessID", "Name", processstatusdataset.ProcessDataset.ProcessID)
ViewBag.OwnerID = New SelectList(db.ProcessOwners, "ProcessOwnerID", "Name", processstatusdataset.ProcessDataset.OwnerID)
Return View(processstatusdataset)
CreateProcessStatusビュー:
@ModelType ProductionDataTrackingMVC.ProcessStatusDataset
@Code
ViewData("Title") = "Add New Process to Datasets"
End Code
<h2>
Add New Process to Datasets</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@Using Html.BeginForm("CreateProcessStatus","ProcessDataset")
@Html.ValidationSummary(True)
@<fieldset>
<legend>Process Status</legend>
<div class="editor-label">
@Html.LabelForPascalCase(Function(model) model.ProcessDataset.Process):
</div>
<div class="editor-field">
@Html.DropDownList("ProcessID", String.Empty)
@Html.ValidationMessageFor(Function(model) model.ProcessDataset.ProcessID)
</div>
<div class="editor-label">
@Html.LabelForPascalCase(Function(model) model.ProcessDataset.ProcessOwner):
</div>
<div class="editor-field">
@Html.DropDownList("OwnerID", String.Empty)
@Html.ValidationMessageFor(Function(model) model.ProcessDataset.OwnerID)
</div>
<div class="editor-label">
@Html.LabelForPascalCase(Function(model) model.ProcessDataset.Started):
</div>
<div class="editor-field">
@Html.EditorFor(Function(model) model.ProcessDataset.Started)
@Html.ValidationMessageFor(Function(model) model.ProcessDataset.Started)
</div>
<div class="editor-label">
@Html.LabelForPascalCase(Function(model) model.ProcessDataset.Completed):
</div>
<div class="editor-field">
@Html.EditorFor(Function(model) model.ProcessDataset.Completed)
@Html.ValidationMessageFor(Function(model) model.ProcessDataset.Completed)
</div>
<br />
<div>
<table>
<tr>
<th>
Dataset Type
</th>
<th>
@Html.LabelForPascalCase(Function(model) model.Datasets.FirstOrDefault().Name)
</th>
</tr>
@For Each item In Model.Datasets
Dim currentItem = item
@<tr>
<td>
@currentItem.GetType().BaseType.Name
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Name)
</td>
</tr>
Next
</table>
</div>
<p>
<input type="submit" value="Add New Process Status" />
</p>
</fieldset>
End Using
<div>
@Html.ActionLink("Back to Process Status Datasets List", "Index")
</div>
この時点で、 POSTメソッドにProcessStatusDataset
渡されるものには、とCreateProcessStatus
のIDが必要な空白のGUIDが常に含まれます。プロパティもです。Process
Owner
Datasets
Nothing
レンダリングされたページのソースを見ると、次のように表示されます。
<form action="/ProcessDataset/CreateProcessStatus/e29bc119-b8c2-4ac5-9ce7-c9780673c193" method="post">
リンクの最後にあるGUIDは、詳細ビューDataset
で選択されたシングルのIDです。Dataset
誰かが私を正しい方向に向けることができますか?運が悪かったのでグーグルを検索してきました。