mardi 22 octobre 2019

passing value of model in contoller not working?

ill try to pass the value of model into controller. but when ill check using break point the model in actionresult is null. i think i have a problem with my ajax that can affect.

my main purpose in my code is when i add data in my table example 3 row it can insert or loop 3 times. so in my database i have 3 records but different tracking number. TrackingNumber field is provided by the user and not autogenerated. im stuck here please help and thank you.

ill tried everything i know but it doesnt work.im newbee here.

see the image below for the reference.

[Order form][1]

My view code

@model OrderFormModel

@{
    ViewBag.Title = "AddOrder";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm("add", "order", FormMethod.Post))
{
    @Html.HiddenFor(x => x.Id)
    @Html.Raw(TempData["msg"])

    <div class="ContainerBanner">
        @Html.Partial("_Message")
        <h3 class="orders">Order</h3><br />
        <div class="row">
            <div class="col-md-4">
                <div class="form-group">
                    @Html.LabelFor(x => x.ClientId, new { @class = "form-label label-color" })
                    @Html.DropDownListFor(x => x.ClientId, Model.Clients, "", new { @class = "form-control", @id = "s-clients" })
                </div>
            </div>

            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.Postcode, new { @class = "form-label" })
                    @Html.TextBoxFor(x => x.Postcode, new { @class = "form-control" })
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.StateId, new { @class = "form-label label-color" })
                    @Html.DropDownListFor(x => x.StateId, Model.States, new { @class = "form-control", @id = "s-states" })
                </div>
            </div>

            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.CityId, new { @class = "form-label label-color" })
                    @Html.DropDownListFor(x => x.CityId, Model.Cities, new { @class = "form-control", @id = "s-cities" })
                </div>
            </div>

            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.TownId, new { @class = "form-label" })
                    @Html.DropDownListFor(x => x.TownId, Model.Towns, new { @class = "form-control", @id = "s-towns" })
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.DatePosted, new { @class = "form-label label-color" })
                    <div class='input-group date datetimepicker'>
                        @Html.TextBoxFor(x => x.DatePosted, new { @class = "form-control" })
                        <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>

            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.DeliveryDate, new { @class = "form-label label-color" })
                    <div class='input-group date datetimepicker'>
                        @Html.TextBoxFor(x => x.DeliveryDate, new { @class = "form-control" })
                        <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>

            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.DateDelivered, new { @class = "form-label" })
                    <div class='input-group date datetimepicker'>
                        @Html.TextBoxFor(x => x.DateDelivered, new { @class = "form-control" })
                        <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    @Html.LabelFor(x => x.Address, new { @class = "form-label label-color" })
                    @Html.TextBoxFor(x => x.Address, new { @class = "form-control" })
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-md-2">
                <div class="form-group">
                    @Html.LabelFor(x => x.Status, new { @class = "form-label" })
                    <select class="form-control" name="Status" id="ShowHide">
                        <option value="Lined-up" @(Model.Status == "Lined-up" ? "selected" : "")>Lined-up</option>
                        <option value="Confirmed" @(Model.Status == "Confirmed" ? "selected" : "")>Confirmed</option>
                        <option value="Cancelled" @(Model.Status == "Cancelled" ? "selected" : "")>Cancelled</option>
                        <option value="Delivered" @(Model.Status == "Delivered" ? "selected" : "")>Delivered</option>
                    </select>
                </div>
            </div>

            <div class="row">
                <div class="col-md-2">
                    <div class="form-group">
                        @Html.LabelFor(x => x.DriverId, new { @class = "form-label" })
                        @Html.DropDownListFor(x => x.DriverId, Model.Drivers, "", new { @class = "form-control" })
                    </div>
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-md-6">
                <table class="table">
                    <thead>
                        <tr>
                            <th>
                                @Html.LabelFor(x => x.TrackingNumber, new { @class = "form-label" })
                            </th>
                            <th>
                                @Html.LabelFor(x => x.Deposit, new { @class = "form-label" })
                            </th>
                        </tr>
                    </thead>

                    <tbody>
                        <tr>
                            <td>
                                @Html.TextBoxFor(x => x.TrackingNumber, new { @class = "form-control tracking" })
                            </td>
                            <td>
                                @Html.TextBoxFor(x => x.Deposit, new { @class = "form-control deposit" })
                            </td>
                        </tr>
                    </tbody>

                    <tfoot>
                        <tr>
                            <td>
                                <input class="btnAdd btn btn-default" type="button" name="name" value="Add" />
                            </td>
                        </tr>
                    </tfoot>
                </table>
            </div>
        </div>

        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    @Html.LabelFor(x => x.Notes, new { @class = "form-label" })
                    @Html.TextAreaFor(x => x.Notes, new { @class = "form-control" })
                </div>
            </div>
            <div class="col-md-6"></div>
        </div>

        <br />
        <button type="submit" id="btnSubmit" class="btn btn-primary btn-sm"><i class="fas fa-save"></i> &nbsp;Save Order</button>
        <a href="@Url.Action("index", "order")" class="btn btn-default btn-sm"><i class="fa fa-long-arrow-alt-left"></i> &nbsp;Back to list</a>
    </div>
}```

my script code

```<script type="text/javascript">

    $(".btnAdd").click(function () {
        var tracking = '<td>@Html.TextBoxFor(x => x.TrackingNumber, new { @class = "form-control tracking" })</td>';
        var deposit = '<td>@Html.TextBoxFor(x => x.Deposit, new { @class = "form-control deposit" })</td>';
        $("tbody").append('<tr>' + tracking + deposit + '</tr>');
    });

    function getAllData() {
        var data = [];
        $('tbody tr').each(function () {
            var TrackingNumber = $(this).find('.tracking').val();
            var Deposit = $(this).find('.deposit').val();

            var alldata = {
                'TrackingNumber': TrackingNumber,
                'Deposit': Deposit,
            }
            data.push(alldata);
        });
        console.log(data);
        return data;
    }
</script>```

My Controller 
```public ActionResult Add(OrderFormModel model, string getepassdata)
        {

            //if (model.Quantity <= 0)
            //    ModelState.AddModelError("CustomError", "Quantity must be greater than 0.");

            if (ModelState.IsValid)
            {
                try
                {
                    if (model.Id > 0)
                    {
                        var order = _orderService.Get(model.Id);

                        order.ClientId = model.ClientId;
                        order.StateId = model.StateId;
                        order.CityId = model.CityId;
                        order.TownId = model.TownId;
                        order.Postcode = model.Postcode;
                        order.Address = model.Address;
                        order.DeliveryDate = Convert.ToDateTime(model.DeliveryDate);
                        //order.Quantity = model.Quantity;
                        order.Deposit = model.Deposit;
                        order.DateDelivered = null;
                        order.Notes = model.Notes;
                        order.DatePosted = Convert.ToDateTime(model.DatePosted);
                        order.DriverId = model.DriverId;

                        if (order.Status == "Delivered" && model.Status == "Cancelled")
                        {
                            ModelState.AddModelError("CustomError", "'Delivered' order cannot be cancelled.");
                            return View(PrepareOrderFormModel(model));
                        }

                        if (model.Status == "Delivered" && model.DateDelivered == null)
                        {
                            ModelState.AddModelError("CustomError", "Date Delivered is required.");
                            return View(PrepareOrderFormModel(model));
                        }

                        if (model.Status == "Delivered")
                        {
                            try
                            {
                                var getUserInrole = _userInRoleService.GetRoleByUserId(order.Client.UserId).RoleId;

                                if ((getUserInrole == 5) || (getUserInrole == 2))
                                {
                                    var transaction = new Transaction
                                    {
                                        Source = "Order",
                                        TransactionId = order.Id,
                                        Amount = (5 * order.Quantity) - order.Deposit, // TODO: create pricing table.
                                        DateCreated = DateTime.Now,
                                        CreatedBy = User.Identity.Name,
                                        ReferenceNumber = order.ReferenceNumber
                                    };
                                    _transactionService.Add(transaction);
                                }
                                if (getUserInrole == 3)
                                {
                                    var transaction = new Transaction
                                    {
                                        Source = "Order",
                                        TransactionId = order.Id,
                                        Amount = (10 * order.Quantity) - order.Deposit, // TODO: create pricing table.
                                        DateCreated = DateTime.Now,
                                        CreatedBy = User.Identity.Name,
                                        ReferenceNumber = order.ReferenceNumber
                                    };
                                    _transactionService.Add(transaction);
                                }
                            }
                            catch (Exception ex)
                            {
                                ModelState.AddModelError("CustomError", ex.Message);
                                return View(PrepareOrderFormModel(model));
                            }
                        }

                        if (model.Status == "Delivered")
                            //order.DateDelivered = DateTime.Now.Date;
                            order.DateDelivered = model.DateDelivered;

                        order.Status = model.Status;

                        _orderService.Update(order);
                        return RedirectToAction("index");
                    }
                    else
                    {
                        var serializeData = JsonConvert.DeserializeObject<List<OrderFormModel>>(getepassdata);

                        foreach (var data in serializeData)
                        {
                            var getMaxId = _orderService.GetAll().OrderByDescending(x => x.Id).FirstOrDefault();

                            var order = new Order
                            {
                                ClientId = model.ClientId,
                                StateId = model.StateId,
                                CityId = model.CityId,
                                TownId = model.TownId,
                                Postcode = model.Postcode,
                                Deposit = data.Deposit,
                                TrackingNumber = data.TrackingNumber,
                                Address = model.Address,
                                DatePosted = Convert.ToDateTime(model.DatePosted),
                                DeliveryDate = Convert.ToDateTime(model.DeliveryDate),
                                Quantity = 1,
                                Status = "Lined-up",
                                DateDelivered = null,
                                Notes = model.Notes ?? "",
                            };

                            if (getMaxId != null)
                            {
                                order.ReferenceNumber = "ODR" + Convert.ToString(string.Format("{0:00000}", getMaxId.Id + 1));
                            }
                            _orderService.Add(order);
                        }
                        return RedirectToAction("add");
                    }
                }

                catch (Exception ex)
                {
                    ModelState.AddModelError("CustomError", ex.InnerException.Message);
                }
            }

            model = PrepareOrderFormModel(model);
            return View(model);
        }```

Expected output

Id   Client    Address     Quantity     TrackNumber       Deposit
1    Mark     St. Kilda        1           AUS1             10
2    Mark     St. Kilda        1           AUS2             10
3    Mark     St. Kilda        1           AUS3             10


  [1]: https://i.stack.imgur.com/z2PQh.jpg



Aucun commentaire:

Enregistrer un commentaire