Я разрабатываю приложение с использованием Asp.net MVC 5 и Entity Framework 6, которое содержит следующую модель продукта:

[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ProductId { get; set; }
        public string Name { get; set; }
        public float Stock { get; set; }

В моем контроллере я заполняю список продуктов:

DemoDBContext db = new DemoDBContext();
public ActionResult Index()
    {
        var productList = db.Products.ToList();
        ViewBag.Products = productList;
        return View();
    }

И мой взгляд:

@{
    ViewBag.Title = "Home Page";
    var productList = ViewBag.Products;
}
 <td>
    @Html.DropDownList("Products", new SelectList(productList, "ProductId", "Name"), "-- Select Product --", new { @class = "form-control" })
                <span class="error">Item name required</span>
  </td>

Я пытаюсь сделать следующее: всякий раз, когда я выбираю продукт из раскрывающегося списка , соответствующий запас этого продукта будет отображаться в htmltextinput . Любая помощь будет оценена по достоинству.

0
Priom Biswas 19 Апр 2016 в 17:17

2 ответа

Лучший ответ

В вашем контроллере вы можете дождаться ProductId:

 public ActionResult Index(int ProductId = 0)
    {
         var productList = db.Products.ToList();
         ViewBag.Products = productList;
         if(ProductId!=0)
         {
           //do the logic to get the stock
         }
         return View();
    }

В представлении все в порядке, просто добавьте скрипт, который отправляет ProductId в качестве параметра строки запроса:

<td>
@Html.DropDownList("Products", new SelectList(productList, "ProductId", "Name"), "-- Select Product --", new { @class = "form-control" })
            <span class="error">Item name required</span>
<script>
 $(function () {
            $('#Products').change(function () {
                window.location = "Index?ProductId=" + $(this).val();
            });
        });
</script>

Я бы лично использовал ViewModel, например:

 public class Product
    {
        [Display(Name="Choose product:")]
        public int Product { get; set; }
        [Display(Name="Stock:")]
        public string Stock { get; set; }
        public List<Products> Products { get; set; }
    }

И контроллер вроде:

 public ActionResult Index(int ProductId = 0)
        {
            var model = new Product
            {
                Products = db.Products.ToList(),
                Stock = ProductId != 0 ? db.Products.Where(x=>x.ProductId == ProductId).FirstOrDefault().Stock : null
            };
            return View(model);
        }

И, наконец, вид вроде:

@model Models.Product
@{
    ViewBag.Title = "Home Page";
}
<table>
   <tr>
    <td>
            @Html.LabelFor(m => m.Product)
            @Html.DropDownListFor(m => m.Product, new SelectList(Model.Products, "ProductId", "Name"), "-- Select Product --", new { onchange = "return ToggleViewItems();" })
            @Html.ValidationMessageFor(m => m.Product, string.Empty, new { @class = "" })
    </td>
    <td>
            @Html.LabelFor(m => m.Stock)
            @Html.TextBoxFor(m => m.Stock)
     </td>
  </tr>
</table>
<script>
   $(function () {
        $('#Product').change(function () {
              window.location = "Index?ProductId=" + $(this).val();
         });
   });
</script>
0
Ana Kochevska 19 Апр 2016 в 14:49

Вы должны использовать JQuery для обработки событий DropdownList. См. Образец для прослушивателя onChange. Jquery OnChange

Затем вы можете отправить асинхронный запрос на сервер, чтобы получить некоторые данные или выполнить некоторые клиентские задачи, используя JQuery или собственный Javascript.

0
ali 19 Апр 2016 в 14:21