c# - 在 ASP.NET MVC 5 中提交表单时保留子对象
问题描述
我想知道提交表单后如何保留我的子对象。
这是我的控制器代码
[HttpPost]
public ActionResult FormListPackage(ListPackagesViewModel lpv)
{
if (!ModelState.IsValid)
{
return View("ListPackage", lpv);
}
ModelState.Clear();
if (lpv.HiddenClickButton == "btnOkRechIndirect")
{
lpv.Agence = "ag1";
lpv.NumCommande = "12355";
lpv.CodeBarreRech = string.Empty;
}
else if (lpv.HiddenClickButton == "btnOkSurbrillance")
{
lpv.CodeBarreSurbrillance = string.Empty;
lpv.LigneCommande = "50";
}
else if (lpv.HiddenClickButton == "btnMiseSurbrillance")
{
//TODO treat order
}
else if (lpv.HiddenClickButton == "btnRechercher")
{
//Get order
lpv.Order.Agency = "ag1";
lpv.Order.OrderNumber = "12355";
lpv.Order.Customer = "client1";
lpv.Order.Customer2 = "client2";
lpv.Order.DeliveryDate = DateTime.Now;
lpv.Order.LoadingPlan = 33;
lpv.Order.IsSav = true;
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "12345", ParentPackage = "", OrderLine = 30, ArtcileCode = "art1", Designation = "des1", Color = "" });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "19837", ParentPackage = "", OrderLine = 30, ArtcileCode = "art2", Designation = "des2", Color = "RED", Statut=0 });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "13908", ParentPackage = "12345", OrderLine = 50, ArtcileCode = "art3", Designation = "des3", Color = "BLUE",Circuit="TEST" });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "14567", ParentPackage = "", OrderLine = 40, ArtcileCode = "art4", Designation = "des4", Color = "YELLOW", });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "15346", ParentPackage = "", OrderLine = 50, ArtcileCode = "art5", Designation = "des5", Color = "BROWN", Statut = 999 });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "16784", ParentPackage = "12345", OrderLine = 40, ArtcileCode = "art6", Designation = "des6", Color = "", Statut = 0 });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "19834", ParentPackage = "", OrderLine = 0, ArtcileCode = "art7", Designation = "des7", Color = "GREEN", });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "18273", ParentPackage = "", OrderLine = 50, ArtcileCode = "art8", Designation = "des8", Color = "WHITE",CancellationDate = DateTime.Now });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "12567", ParentPackage = "", OrderLine = 70, ArtcileCode = "art9", Designation = "des9", Color = "", Statut = 0, Circuit = "TEST3" });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "13425", ParentPackage = "", OrderLine = 70, ArtcileCode = "art10", Designation = "deS10", Color = "", });
lpv.Order.Packages.Add(new PackageModel() { CodeBarre = "17894", ParentPackage = "12567", OrderLine = 100, ArtcileCode = "art11", Designation = "des11", Color = "", Circuit = "TEST2",Statut= null });
lpv.Order.Packages.ForEach(h => h.Action = "SetNoFab");
}
List<OrderModel> lstOrder = null;
ErrorModel error = null;
return View("ListPackages", lpv);
}
当我使用btnRechercher
按钮提交表单时,我将数据放在我的对象上ListPackagesViewModel
(此对象作为子对象 => 订单。)
当我使用btnOkRechIndirect
按钮提交表单时,我想将我的数据保留在ListPackagesViewModel
. 我丢失了子对象 Order。
有可能保留吗?
这是cshtml的代码:
@using (Html.BeginForm("FormListPackage", "NoFab"))
{
@Html.HiddenFor(m => m.HiddenClickButton)
<div><h2>Recherche des colis à annuler </h2></div><br /><br />
<div>
<table class="table">
<tr>
<td>
<table>
<thead>Recherche direct</thead>
<tr>
<td>
@Html.LabelFor(m => m.Agence)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.Agence, new { @maxlength = "3" }) @Html.Raw(" ")
</td>
</tr>
<tr>
<td>
@Html.LabelFor(m => m.NumCommande)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.NumCommande, new { @maxlength = "9" })@Html.Raw(" ")
</td>
</tr>
</table>
</td>
<td>@Html.Raw(" ") </td>
<td>
<table>
<thead>Recherche Agence/Commande</thead>
<tr>
<td>
@Html.LabelFor(m => m.CodeBarreRech)@Html.Raw(" ") @Html.Raw(" ")
@Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw(" ")@Html.Raw(" ")
<button type="submit" id="btnOkRechIndirect">ok</button>
@Html.ValidationMessage("CustomValidationRechOK")
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div id="divMiseEnSurbrillance">
<table class="table">
<tr>
<td>
<table>
<thead>Mise en surbrillance</thead>
<tr>
<td>
@Html.LabelFor(m => m.LigneCommande)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.LigneCommande, new { @maxlength = "5" })@Html.Raw(" ")
@Html.ValidationMessage("CustomValidationMiseSurbrillance")
<button type="submit" id="btnMiseSurbrillance">Mise en surbrillance</button>
</td>
</tr>
</table>
</td>
<td>@Html.Raw(" ") </td>
<td>
<table>
<thead>Recherche LigneCommande</thead>
<tr>
<td>
@Html.LabelFor(m => m.CodeBarreRech)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw(" ")@Html.Raw(" ")
<button type="submit" id="btnOkSurbrillance">ok</button>
@Html.ValidationMessage("CustomValidationRechOK")
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<button type="submit" id="btnRechercher">Rechercher</button>
<br />
<br />
if (Model.HiddenClickButton == "btnRechercher")
{
if (Model.Order.Packages.Count > 0)
{
var grid = new WebGrid(
Model.Order.Packages, rowsPerPage: 15,
defaultSort: ""
);
@grid.GetHtml(
tableStyle: "webgrid-table",
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
alternatingRowStyle: "webgrid-alternating-row",
rowStyle: "webgrid-row-style",
fillEmptyRows: false,
mode: WebGridPagerModes.All,
columns:
grid.Columns
(
//grid.Column("test", format: (item) => { if (!item.IsLocked) return "<input type='checkbox' value='@item.IsChecked' /></text>"; else return ""; }, canSort: false, style: "checkBox"),
grid.Column("TEST", format: @<text> <input type="checkbox" value="@item.IsChecked" /> </text>, canSort: false, style: "checkBox"),
grid.Column("TEST", format:(item) =>
{
if (item.IsLocked)
return "";
else
return Html.Raw(string.Format("<input type=\"checkbox\" value=\"{0}\" />", @item.IsChecked));
}, canSort: false, style: "checkBox"),
grid.Column("Agency", format: @<text> @Model.Order.Agency </text>, canSort: false, style: "Btn"),
grid.Column("Commande", format: @<text> @Model.Order.OrderNumber </text>, canSort: false, style: "Btn"),
grid.Column("CodeBarre", header: "CAB", canSort: false, style: "ArtcileCode"),
grid.Column("ParentPackage", header: "Maitre", canSort: false, style: "ArtcileCode"),
grid.Column("OrderLine", header: "Ligne", canSort: false, style: "ArtcileCode"),
grid.Column("ArtcileCode", header: "ArtcileCode", canSort: false, style: "ArtcileCode"),
grid.Column("Designation", header: "Designation", canSort: false, style: "ArtcileCode"),
grid.Column("Color", header: "Color", canSort: false, style: "ArtcileCode"),
grid.Column("Statut", header: "Statut", canSort: false, style: "ArtcileCode"),
grid.Column(format: (item) => item.CancellationDate == null ? string.Empty : String.Format("{0:dd/MM/yyyy HH:mm:ss}", item.CancellationDate),
header: "CancellationDate", canSort: false, style: "ArtcileCode"
),
grid.Column("SaisieAdv", header: "SaisieAdv", canSort: false, style: "ArtcileCode"),
grid.Column("Circuit", header: "Circuit", canSort: false, style: "ArtcileCode"),
grid.Column("CommercialCategory", header: "CommercialCategory", canSort: false, style: "ArtcileCode"),
grid.Column("IsLocked", header: "IsLocked", canSort: false, style: "ArtcileCode"),
grid.Column("Action", header: "Action", canSort: false, style: "ArtcileCode")
)
)
}
else
{
<div style="width:30%;">
<h3>Aucune ligne renvoyé</h3>
</div>
}
}
}
这是cshtml的代码
@section scripts
{
<script type="text/javascript">
$(document).ready(function () {
$("#btnOkRechIndirect").click(function () {
$("#HiddenClickButton").val('btnOkRechIndirect');
}
);
$("#btnOkSurbrillance").click(function () {
$("#HiddenClickButton").val('btnOkSurbrillance');
}
);
$("#btnMiseSurbrillance").click(function () {
$("#HiddenClickButton").val('btnMiseSurbrillance');
}
);
$("#btnRechercher").click(function () {
$("#HiddenClickButton").val('btnRechercher');
}
);
});
</script>
}
@using (Html.BeginForm("FormListPackage", "NoFab"))
{
@Html.HiddenFor(m => m.HiddenClickButton)
<div><h2>Recherche des colis à annuler </h2></div><br /><br />
<div>
<table class="table">
<tr>
<td>
<table>
<thead>Recherche direct</thead>
<tr>
<td>
@Html.LabelFor(m => m.Agence)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.Agence, new { @maxlength = "3" }) @Html.Raw(" ")
</td>
</tr>
<tr>
<td>
@Html.LabelFor(m => m.NumCommande)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.NumCommande, new { @maxlength = "9" })@Html.Raw(" ")
</td>
</tr>
</table>
</td>
<td>@Html.Raw(" ") </td>
<td>
<table>
<thead>Recherche Agence/Commande</thead>
<tr>
<td>
@Html.LabelFor(m => m.CodeBarreRech)@Html.Raw(" ") @Html.Raw(" ")
@Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw(" ")@Html.Raw(" ")
<button type="submit" id="btnOkRechIndirect">ok</button>
@Html.ValidationMessage("CustomValidationRechOK")
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div id="divMiseEnSurbrillance">
<table class="table">
<tr>
<td>
<table>
<thead>Mise en surbrillance</thead>
<tr>
<td>
@Html.LabelFor(m => m.LigneCommande)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.LigneCommande, new { @maxlength = "5" })@Html.Raw(" ")
@Html.ValidationMessage("CustomValidationMiseSurbrillance")
<button type="submit" id="btnMiseSurbrillance">Mise en surbrillance</button>
</td>
</tr>
</table>
</td>
<td>@Html.Raw(" ") </td>
<td>
<table>
<thead>Recherche LigneCommande</thead>
<tr>
<td>
@Html.LabelFor(m => m.CodeBarreRech)@Html.Raw(" ") @Html.Raw(" ")
</td>
<td>
@Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw(" ")@Html.Raw(" ")
<button type="submit" id="btnOkSurbrillance">ok</button>
@Html.ValidationMessage("CustomValidationRechOK")
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<button type="submit" id="btnRechercher">Rechercher</button>
<br />
<br />
if (Model.HiddenClickButton == "btnRechercher")
{
if (Model.Order.Packages.Count > 0)
{
var grid = new WebGrid(
Model.Order.Packages, rowsPerPage: 15,
defaultSort: ""
);
@grid.GetHtml(
tableStyle: "webgrid-table",
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
alternatingRowStyle: "webgrid-alternating-row",
rowStyle: "webgrid-row-style",
fillEmptyRows: false,
mode: WebGridPagerModes.All,
columns:
grid.Columns
(
//grid.Column("test", format: (item) => { if (!item.IsLocked) return "<input type='checkbox' value='@item.IsChecked' /></text>"; else return ""; }, canSort: false, style: "checkBox"),
grid.Column("TEST", format: @<text> <input type="checkbox" value="@item.IsChecked" /> </text>, canSort: false, style: "checkBox"),
grid.Column("TEST", format:(item) =>
{
if (item.IsLocked)
return "";
else
return Html.Raw(string.Format("<input type=\"checkbox\" value=\"{0}\" />", @item.IsChecked));
}, canSort: false, style: "checkBox"),
grid.Column("Agency", format: @<text> @Model.Order.Agency </text>, canSort: false, style: "Btn"),
grid.Column("Commande", format: @<text> @Model.Order.OrderNumber </text>, canSort: false, style: "Btn"),
grid.Column("CodeBarre", header: "CAB", canSort: false, style: "ArtcileCode"),
grid.Column("ParentPackage", header: "Maitre", canSort: false, style: "ArtcileCode"),
grid.Column("OrderLine", header: "Ligne", canSort: false, style: "ArtcileCode"),
grid.Column("ArtcileCode", header: "ArtcileCode", canSort: false, style: "ArtcileCode"),
grid.Column("Designation", header: "Designation", canSort: false, style: "ArtcileCode"),
grid.Column("Color", header: "Color", canSort: false, style: "ArtcileCode"),
grid.Column("Statut", header: "Statut", canSort: false, style: "ArtcileCode"),
grid.Column(format: (item) => item.CancellationDate == null ? string.Empty : String.Format("{0:dd/MM/yyyy HH:mm:ss}", item.CancellationDate),
header: "CancellationDate", canSort: false, style: "ArtcileCode"
),
grid.Column("SaisieAdv", header: "SaisieAdv", canSort: false, style: "ArtcileCode"),
grid.Column("Circuit", header: "Circuit", canSort: false, style: "ArtcileCode"),
grid.Column("CommercialCategory", header: "CommercialCategory", canSort: false, style: "ArtcileCode"),
grid.Column("IsLocked", header: "IsLocked", canSort: false, style: "ArtcileCode"),
grid.Column("Action", header: "Action", canSort: false, style: "ArtcileCode")
)
)
}
else
{
<div style="width:30%;">
<h3>Aucune ligne renvoyé</h3>
</div>
}
}
}
解决方案
推荐阅读
- cuda - 可以将短裤数组传递到 CUDA 内核中吗
- docker - 使用 docker 实时升级
- html - 尝试使用 flex 规则在 flex 容器中左对齐文本
- zapier - 样本数据引起的额外触发输出
- python - Python - 如何根据字典对数组中的值进行排序和替换
- c# - 如何读取一个字符串直到逗号,然后保存该位并显示它?
- laravel - GraphQL ID 类型更正 - 如何使用 String?
- python - 如何通过 Python 使用谷歌翻译翻译口语成绩单
- javascript - 如何专门为字符串着色文本?
- javascript - Javascript Promise 链接无法按预期工作