私は非常によく似た質問をしましたが、今は外的要因を絞り込み、誰かが私が間違っていることと、期待した結果が得られない理由を教えてくれることを願っています.
私のコントローラでは、データベースからデータを取得します:
List<MCS_DocumentFields> model = (List<MCS_DocumentFields>)DocumentFieldService.GetFieldsForDocument(documentId);
順序付けを行い、List をビューに渡します。
var finalModel = model
.OrderBy(c => c.ContentTypeId)
.ThenBy(c => c.RowNo)
.ThenBy(c => c.ColumnNo)
.ThenBy(c => c.MCS_Fields.Order)
.ToList();
return View(finalModel);
この時点finalModel
でのタイプはList<MCS_DocumentFields>
です。
私の見解は次のとおりです。
@model List<DataAccess.MCS_DocumentFields>
@{
ViewBag.Title = "Document";
}
<div id="drawForm">
@using (Html.BeginForm("ActionMethodName", "Forms"))
{
<table border="1">
@for (int i = 0; i < Model.Count; i++)
{
if (!string.IsNullOrEmpty(Model[i].FieldValue))
{
<tr>
<td>
@Html.DisplayFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].Id)
</td>
</tr>
}
}
</table>
<button type="submit">Submit</button>
}
</div>
これはレンダリングであり、ブラウザで約 15 行のデータが表示されます。コントローラーにデータを送信すると:
[HttpPost]
public ActionResult ActionMethodName(List<MCS_DocumentFields> collection)
{
var test = collection;
//Some other code
}
ビューでこの特定のコードを使用すると、ページにレンダリングされた 15 件のレコードから 1 件のレコードが返されます。
ただし、次のようにビューを変更すると:
<table border="1">
@for (int i = 0; i < Model.Count; i++)
{
if (Model[i].ContentTypeId == 1)
{
<tr>
<td>
@Html.DisplayFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].Id)
</td>
</tr>
}
}
</table>
より具体的if (Model[i].ContentTypeId == 1)
には、10 個のレコードを取得します (この ContentTypeId には実際に 10 個あります)。
そして、私がこのようなビューを作ると:
<table border="1">
@for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.DisplayFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].FieldValue)
@Html.HiddenFor(x => x[i].Id)
</td>
</tr>
}
</table>
まったくチェックせず、すべてのレコードを反復するだけです-すべてのレコード(43)をコントローラーに戻します-何も欠けていません。
非常に紛らわしいです - 私は 1 つのエンティティで作業していて、異なるプロパティ値をチェックして、毎回異なる結果を得ています。そして、チェックをまったく実行しないと、すべてが元に戻ります...何が原因でしょうか..?