Ich habe eine Ansicht, die ein ViewModel auf der Seite anzeigt. Ich möchte dem Benutzer erlauben, eine Taste zu drücken, um eine CSV-Datei zu erstellen, die dann an sie per E-Mail gesendet wird. Ich habe den POSt funktioniert, aber das ViewModel, das zurückgeschickt wird, ist immer leer, obwohl die Seite deutlich viele Zeilen zeigt.Zurück ein ViewBag ViewModel zurück zu Controller in BeginForm Post-Methode in der Ansicht
Dies ist ein Teil der Ansicht in Frage:
<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>
Dies ist die Seite-Controller die POST-Methode empfängt:
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);
}
Die "AllRecognitions" Ansicht Modell ist leer in der Action aber ISN in der Ansicht selbst leer. Wie kann ich das aktuelle Ansichtsmodell mit den aktuellen Werten in der Ansicht zurück zum ActionResult (SubmitExcel) abrufen?
Sie möchten TempData für Ihre AllRecognitions. Es wird für Sie da sein, wenn Sie POST. Sie können den ViewBag weiterhin für das Rendern verwenden, wenn Sie möchten, aber dann ist es verloren, wenn Sie es nicht mit Formulareingabeelementen verknüpfen. TempData überlebt die Rundreise in Erinnerung und ist nicht abhängig von der Form. –