2016-04-19 179 views
0

我正在開發使用Asp.net MVC 5和Entity Framework 6含有一個產品型號如下應用:基於下拉列表中選擇項目在Asp.net MVC中選擇數據5

[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

在你CONTROLER,你可以等待產品編號:

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(); 
    } 

在視圖中,它是確定,只是添加腳本,即發送產品編號作爲查詢字符串參數:

<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> 

我本人來說使用視圖模型,如:

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

感謝您的回覆。對我來說,添加另一個視圖模型並處理它似乎太複雜了。你能簡化解決方案嗎? –

+0

我檢查你的代碼,它沒有選擇基於產品選擇 –

+0

它是什麼選擇股票?股票是否有價值?或者它是空的? –

0

你應該使用jQuery來處理下拉列表的事件。請參閱onChange監聽器的示例。 Jquery OnChange

然後,您可以發送異步請求給服務器,以獲得一些數據或做使用jQuery或本地JavaScript一些客戶端的任務。

+0

''我目前這樣做的,不明白下一步該怎麼做。 –