Функция замены в выпадающем списке и отображение соответствующего значения в текстовом поле - PullRequest
1 голос
/ 31 марта 2020

Я хочу отображать значение в поле texbox каждый раз, когда я выбираю данные в раскрывающемся поле. Поскольку я новичок в asp. net mvc, меня это немного смущает. Каждый раз, когда я выбираю какое-либо значение из позиции DropDown, я хочу отобразить соответствующее значение цены в столбце цены.

Вот мой взгляд:

 @model Resturant.Model.OrderItemDTO
@using Resturant.Model;
@{
    ViewBag.Title = "AddItem";
}

<div class="wrapper " id="frmAddItem">
    @{ Html.RenderPartial("OrderPartials/_OrderSidebar");}
    <div class="main-panel">
        @{ Html.RenderPartial("OrderPartials/_OrderTopbar");}

        <div class="content">
            <div class="container">
                <div class="row">
                    <div class="col-md-6">
                        @*@Html.ActionLink("Back", String.Format("CreateOrder/", Model == null ? 0 : Model.OrderIdFK));*@
                        @using (Html.BeginForm("AddItem", "Order", FormMethod.Post))
                        {
                            @Html.HiddenFor(x => x.OrderIdFK)

                            @Html.AntiForgeryToken()

                            <div class="form-horizontal">
                                <h4>Create New Order</h4>
                                <hr />
                                @Html.ValidationSummary(true, "", new { @class = "text-danger" })


                                    <div class="col-md-10" id="Item" name="Item">
                                        <label for="item">Items</label><br />
                                        @*@Html.LabelFor(model => model.ItemIdFK, htmlAttributes: new { @class = "control-label col-md-2" })*@

                                        @Html.DropDownListFor(x => x.ItemIdFK, (IEnumerable<SelectListItem>)ViewBag.Item)
                                    </div>
                                    <br />


                                    <div class="form-group">
                                        @Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
                                        <div class="col-md-10" id="Price" name="Price">
                                            @Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } })
                                            @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
                                        </div>
                                    </div>


                                <div class="form-group">
                                    @Html.LabelFor(model => model.Quantity, htmlAttributes: new { @class = "control-label col-md-2" })
                                    <div class="col-md-10">
                                        @Html.EditorFor(model => model.Quantity, new { htmlAttributes = new { @class = "form-control" } })
                                        @Html.ValidationMessageFor(model => model.Quantity, "", new { @class = "text-danger" })
                                    </div>
                                </div>



                                <div class="form-group">
                                    <div class="col-md-offset-2 col-md-10">
                                        <input type="submit" value="Add Item" class="btn btn-default" />
                                    </div>
                                </div>


                            </div>
                        }

                    </div>
                </div>
            </div>


        </div>
    </div>
</div>

Мой код контроллера:

[HttpGet]
public ActionResult AddItem(string id)
{
    OrderItemDTO orderItem = new OrderItemDTO();
    orderItem.OrderIdFK = int.Parse(id);
    ViewBag.Item = GetItem();
    //ViewBag.Order = GetOrder();
    return View(orderItem);
}

[HttpPost]
public ActionResult AddItem(OrderItemDTO orderItemDTO)
{
    var serializer = new JavaScriptSerializer();

    // For simplicity just use Int32's max value.
    // You could always read the value from the config section mentioned above.
    serializer.MaxJsonLength = Int32.MaxValue;
    IRestResponse response = APIHelper.InvokePOSTMethod(Constants.CreateOrderItem, orderItemDTO);
    if (response.StatusCode == System.Net.HttpStatusCode.OK)
    {
        orderItemDTO = serializer.Deserialize<OrderItemDTO>(response.Content);
        OrderItemsHub.BroadcastData();
    }
    //ViewBag.Error = "Data save successsful!";
    else
        ViewBag.Error = response.Content;

    //return RedirectToAction("ManageOrder");
    return RedirectToAction("ManageOrder", new { @id = orderItemDTO.OrderIdFK });
    //return RedirectToAction("AddItem");
}

Вот моя модель OrderItem:

     public class OrderItemDTO
{
    public int OrderItemId { get; set; }
    public int OrderIdFK { get; set; }
    public int ItemIdFK { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }

    public virtual Item Item { get; set; }
    public virtual Order Order { get; set; }
}

Вот моя модель заказа:

 public class OrderDTO
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public OrderDTO()
    {
        this.OrderItems = new HashSet<OrderItem>();
    }
    public int OrderId { get; set; }
    public int TableId { get; set; }
    public Nullable<int> CustomerId { get; set; }
    public Nullable<System.DateTime> OrderDate { get; set; }
    public Nullable<int> Status { get; set; }
    public StatusEnum StatusType { get; set; }

    public virtual Furniture Furniture { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<OrderItem> OrderItems { get; set; }

}

Вот моя модель товара:

 public class ItemDTO
{

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public ItemDTO()
    {
        this.OrderItems = new HashSet<OrderItem>();
    }

    public int ItemId { get; set; }
    public string ItemCategory { get; set; }
    public string ItemName { get; set; }
    public Nullable<decimal> Price { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<OrderItem> OrderItems { get; set; }

}

1 Ответ

0 голосов
/ 01 апреля 2020
  1. Вы можете добавить метод onchange для вашего выпадающего элемента, как здесь:

    @ Html .DropDownListFor (x => x.ItemIdFK, (IEnumerable) ViewBag.Item, new {@ onchange = "BindTextBoxValue (this.value)")

  2. И затем реализуйте функцию BindTextBoxValue в Jquery следующим образом:

<script>
            function BindTextBoxValue(ItemId){
            $.ajax({
            url: "controllername/postactionmethodname",
            type: "GET",
            data: { id: ItemId},
            cache: false,
            async: true,
            success: function (data) {
            $("#Price").val(data.Price);
            }
            }
</script>
Вы можете создать метод Action, который будет возвращать цену за элемент на основе идентификатора.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...