私はページにViewModelを表示するViewを持っています。ユーザーがボタンを押してCSVファイルを作成し、そのファイルに電子メールで送信することを許可します。私はPOStが動作しているが、ページには明らかに多くの行が表示されているにもかかわらず、返されるViewModelは常に空です。ViewBag ViewModelをBeginFormのBeginForm PostメソッドのControllerに戻します。
これは、問題のビューの一部である:
public ActionResult SubmitExcel(List<ViewModels.AllRecognitionViewModel> AllRecognitions)
{
ViewBag.NoSearch = "block";
ViewBag.SupervisorSearch = "none";
ViewBag.DepartmentSearch = "none";
ViewBag.EmployeeSearch = "none";
DataTable dtAllRecognitions = Base.SQLHelper.ConvertListToDataTable(AllRecognitions.ToList());
DataSet dsAllRecognitions = new DataSet();
dsAllRecognitions.Tables.Add(dtAllRecognitions);
FHSBase.FHS.DataHelper.SendMeExcelFile(dsAllRecognitions, "Recognitions", CurrentUser);
ViewModels.AllRecognitionBigViewModel AllRecognitionBigViewModel = new ViewModels.AllRecognitionBigViewModel();
AllRecognitionBigViewModel.AllRecognitionViewModel = null;
Models.DateRange DateRange = new Models.DateRange();
DateRange.fromDate = DateTime.Today.Date;
DateRange.toDate = DateTime.Today.Date;
AllRecognitionBigViewModel.DateRange = DateRange;
ViewBag.AllRecognitionBigViewModel = AllRecognitionBigViewModel;
List<SelectListItem> empList = new List<SelectListItem>();
string VPath = "Index";
return View(VPath, empList);
}
「AllRecognitions」ビューモデルのActionResultが、ISNにおいて空である:
<table style="width:99%" cellpadding="3" class="ContentTable" border="1" align="center">
@using (Html.BeginForm("SubmitExcel", "AllRecognition", new { AllRecognitions = ViewBag.AllRecognitionBigViewModel.AllRecognitionViewModel }, FormMethod.Post, new { id = "submitExcel" }))
{
<tr>
<td style="padding:3px;">
<input type="submit" name="BtnSubmitExcel" id="BtnSubmitExcel" value="Export to Excel" />
</td>
</tr>
}
<tr style="background-color:#5D7B9D;color:white;">
<th style="width:4%;padding:3px;font-size:12px;">Date</th>
<th style="width:8%;padding:3px;font-size:12px;">Employee</th>
<th style="width:8%;padding:3px;font-size:12px;">Recognized By</th>
<th style="width:6%;padding:3px;font-size:12px;">5-Star Standard</th>
<th style="width:70%;padding:3px;font-size:12px;">Description</th>
<th style="width:4%;padding:3px;font-size:12px;">Points</th>
</tr>
@{
if (ViewBag.AllRecognitionBigViewModel.AllRecognitionViewModel != null)
{
foreach (Recognition.ViewModels.AllRecognitionViewModel item in ViewBag.AllRecognitionBigViewModel.AllRecognitionViewModel)
{
@:<tr>
@:<td style="width:4%;padding:3px;font-size:12px;">@item.Date</td>
@:<td style="width:8%;padding:3px;font-size:12px;">@item.Employee</td>
@:<td style="width:8%;padding:3px;font-size:12px;">@item.RecognizedBy</td>
@:<td style="width:6%;padding:3px;font-size:12px;">@item.FiveStarStandard</td>
@:<td style="width:70%;padding:3px;font-size:12px;">@item.Description</td>
@:<td style="width:4%;padding:3px;font-size:12px;">@item.Points</td>
@:</tr>
}
}
}
</table>
これは、POSTメソッドを受信し、コントローラ側でありますビュー自体は空ではありません。どのように現在のビューモデルをViewに表示されている現在の値でActionResult(SubmitExcel)に戻すことができますか?
あなたはAllRecognitionsのTempDataが必要です。あなたがPOSTするときにあなたのためにそこにあります。必要に応じてViewBagをレンダリングに使用することはできますが、フォーム入力要素と一致させない限り、失われます。 TempDataはメモリ内のラウンドトリップに耐え、フォームに依存しません。 –