首页 > 解决方案 > 在 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("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.Agence, new { @maxlength = "3" }) @Html.Raw("&nbsp")
                            </td>
                        </tr>
                        <tr>
                            <td>
                                @Html.LabelFor(m => m.NumCommande)@Html.Raw("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.NumCommande, new { @maxlength = "9" })@Html.Raw("&nbsp")
                            </td>
                        </tr>
                    </table>
                </td>
                <td>@Html.Raw("&nbsp") </td>
                <td>
                    <table>
                        <thead>Recherche Agence/Commande</thead>
                        <tr>
                            <td>
                                @Html.LabelFor(m => m.CodeBarreRech)@Html.Raw("&nbsp") @Html.Raw("&nbsp")
                                @Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw("&nbsp")@Html.Raw("&nbsp")
                                <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("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.LigneCommande, new { @maxlength = "5" })@Html.Raw("&nbsp")
                                @Html.ValidationMessage("CustomValidationMiseSurbrillance")
                                <button type="submit" id="btnMiseSurbrillance">Mise en surbrillance</button>
                            </td>
                        </tr>
                    </table>
                </td>
                <td>@Html.Raw("&nbsp") </td>
                <td>
                    <table>
                        <thead>Recherche LigneCommande</thead>
                        <tr>
                            <td>
                                @Html.LabelFor(m => m.CodeBarreRech)@Html.Raw("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw("&nbsp")@Html.Raw("&nbsp")
                                <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("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.Agence, new { @maxlength = "3" }) @Html.Raw("&nbsp")
                            </td>
                        </tr>
                        <tr>
                            <td>
                                @Html.LabelFor(m => m.NumCommande)@Html.Raw("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.NumCommande, new { @maxlength = "9" })@Html.Raw("&nbsp")
                            </td>
                        </tr>
                    </table>
                </td>
                <td>@Html.Raw("&nbsp") </td>
                <td>
                    <table>
                        <thead>Recherche Agence/Commande</thead>
                        <tr>
                            <td>
                                @Html.LabelFor(m => m.CodeBarreRech)@Html.Raw("&nbsp") @Html.Raw("&nbsp")
                                @Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw("&nbsp")@Html.Raw("&nbsp")
                                <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("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.LigneCommande, new { @maxlength = "5" })@Html.Raw("&nbsp")
                                @Html.ValidationMessage("CustomValidationMiseSurbrillance")
                                <button type="submit" id="btnMiseSurbrillance">Mise en surbrillance</button>
                            </td>
                        </tr>
                    </table>
                </td>
                <td>@Html.Raw("&nbsp") </td>
                <td>
                    <table>
                        <thead>Recherche LigneCommande</thead>
                        <tr>
                            <td>
                                @Html.LabelFor(m => m.CodeBarreRech)@Html.Raw("&nbsp") @Html.Raw("&nbsp")
                            </td>
                            <td>
                                @Html.TextBoxFor(m => m.CodeBarreRech, new { @maxlength = "10" })@Html.Raw("&nbsp")@Html.Raw("&nbsp")
                                <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>
        }
    }
}

标签: c#asp.net-mvc-5

解决方案


推荐阅读