我的实体框架中有一个带有2个表的mvc 3应用程序。
PurchaseTable,即PurchaseID,PurchaseDate& ProductID我有另一个名为Product的表,其中包含ProductID和ProductName。创建新视图以插入新购买如何将ProductID视图中的文本框更改为Product表中ProductName限定的下拉列表?
答案 0 :(得分:6)
创建ViewModel:
public class CreatePurchaseViewModel
{
public Purchase Purchase { get; set; }
public IEnumerable<SelectListItem> Products { get; set; }
public int SelectedProductId { get; set; }
}
使用ViewModel设置视图:
[HttpGet]
public ActionResult CreateProduct()
{
var model = new CreatePurchaseViewModel
{
Products = repository.FindAllProducts().Select(x =>
new SelectListItem
{
Text = x.ProductName,
Value = x.ProductId
}
};
return View(model);
}
然后只需绑定到ViewModel并使用DropDownListFor HTML Helper:
<! -- other code to bind to Purchase, and then: -->
<%= Html.DropDownListFor(x => x.SelectedProductId, Model.Products) %>
然后,当您提交表单时,模型中的SelectedProductId
值将使用下拉列表中的选定值进行填充。
答案 1 :(得分:3)
答案比看起来容易。只需创建一个列表:
myDropDown = new SelectList(db.Products, "Product_ID", "ProductName", idSelected);
第一个参数是你的表(实体模型中的“Products”),第二个参数是从列表中选择时返回的“id”(即SelectedValue),第三个参数是“text”,它将是显示在列表中,最后一个参数是当前选定的项目。
假设您的模型名为MyTablesDB,那么:
MyTablesDB db = new MyTablesDB();
例如:
public SelectList GetPullDown(object idSelected) {
myTablesDB myDB = new MyTablesDB();
return new SelectList(myDB.Products, "Product_ID", "Product_Name", idSelected);
}
干杯,