在我的 MedicalProductController
我正在尝试转换 MedicalProduct
(模型类)将“产品”命名为 IEnumerable<MedicalProduct>
所以它可以传递给GetMedicalProductViewModelList
,这将返回一个 IEnumerable<MedicalProductViewModel>
( View 模型类)。
我试图将 SQL 调用保持在最低限度。根据其他 stackoverflow 成员的建议。
但是“product”没能变成IEnumerable<MedicalProduct>
在我的 MedicalProductController
类
医疗产品 Controller
public class MedicalProductController : Controller
{
private MvcMedicalStoreDb _db = new MvcMedicalStoreDb();
// other CRUD code omitted for brevity.
// =============
// Edit HttpGet
// =============
public ActionResult Edit(int id = 0)
{
MedicalProduct product = _db.Products.Find(id);
if (product == null)
{
return HttpNotFound();
}
var productList = product as IEnumerable<MedicalProduct>;
var viewModelList = GetMedicalProductViewModelList(productList);
return View(viewModelList);
}
// =============
// Edit HttpPost
// =============
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(MedicalProduct product)
{
if (ModelState.IsValid)
{
_db.Entry(product).State = EntityState.Modified;
_db.SaveChanges();
return RedirectToAction("Index");
}
var productList = product as IEnumerable<MedicalProduct>;
var viewModel = GetMedicalProductViewModelList(productList);
return View(viewModel);
}
// =====================
// Mapper Class Helper
// =====================
public IEnumerable<MedicalProductViewModel> GetMedicalProductViewModelList(IEnumerable<MedicalProduct> productList)
{
var brandList = _db.Brands.ToArray();
var mapper = new MedicalProductMapper();
return mapper.MapMedicalProductViewModel(productList, brandList);
}
为了以防万一,这里是映射类:
医疗产品映射器
public class MedicalProductMapper
{
// =====================
// Model to ViewModel
// =====================
public IEnumerable<MedicalProductViewModel> MapMedicalProductViewModel(IEnumerable<MedicalProduct> medicalProductList, IEnumerable<Brand> brandList)
{
var brandSelectListItem = brandList.Select(b => new SelectListItem()
{
Text = b.Name,
Value = b.Name
});
var viewModelList = medicalProductList.Select(p => new MedicalProductViewModel()
{
BrandID = p.BrandID,
BrandName = brandList.SingleOrDefault(b => b.ID == p.BrandID).Name,
BrandSelectListItem = brandSelectListItem,
ID = p.ID,
Price = p.Price,
Name = p.Name
});
return viewModelList;
}
// =====================
// ViewModel to Model
// =====================
public MedicalProduct MapMedicalProduct(MedicalProductViewModel VM)
{
var model = new MedicalProduct()
{
Name = VM.Name,
Price = VM.Price,
BrandID = VM.BrandID
};
return model;
}
}
最佳答案
代替
var productList = product as IEnumerable<MedicalProduct>;
尝试
var productList = new List<MedicalProduct> { product };
你不能转换到IEnumerable<MedicalProduct>
如果它不是 IEnumerable
,我在这个例子中所做的是首先创建一个类型为 MedicalProduct
的新列表然后将产品添加到列表中。
List是实现IEnumerable的类型之一
关于c# - 尝试将我的模型转换为 IEnumerable<Model>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105091/