【发布时间】:2011-04-20 11:19:24
【问题描述】:
我需要使用 nHibernate 映射填充数据库字段中的数据,以便在 ASP.net MVC3 中进行选择...请给我发送一个示例代码,说明如何执行此操作..
问候 斯里维迪亚
【问题讨论】:
标签: asp.net asp.net-mvc-3 select
我需要使用 nHibernate 映射填充数据库字段中的数据,以便在 ASP.net MVC3 中进行选择...请给我发送一个示例代码,说明如何执行此操作..
问候 斯里维迪亚
【问题讨论】:
标签: asp.net asp.net-mvc-3 select
您可以从定义视图模型开始:
public class MyViewModel
{
public string SelectedItemId { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
然后是一个控制器,它将填充这个视图模型(在开始时硬编码一些值只是为了确保它可以工作并且你有一个模型屏幕可以向你的用户显示):
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Items = new[]
{
new SelectListItem { Value = "1", Text = "item 1" },
new SelectListItem { Value = "2", Text = "item 2" },
new SelectListItem { Value = "3", Text = "item 3" },
}
};
return View(model);
}
}
最后是一个视图:
@model MyViewModel
@Html.DropDownListFor(
x => x.SelectedItemId,
new SelectList(Model.Items, "Value", "Text")
)
下一步可能包括定义一个模型,设置这个模型的映射,一个允许您使用 NHibernate 获取模型的存储库,最后在控制器操作中调用这个存储库并将返回的模型映射到我使用的视图模型在示例中:
型号:
public class Item
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
存储库:
public interface IItemsRepository
{
IEnumerable<Item> GetItems();
}
现在控制器变成了:
public class HomeController : Controller
{
private readonly IItemsRepository _repository;
public HomeController(IItemsRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
var items = _repository.GetItems();
var model = new MyViewModel
{
Items = items.Select(item => new SelectListItem
{
Value = item.Id.ToString(),
Text = item.Name
})
};
return View(model);
}
}
好的,我们正在一点一点地取得进展。现在您可以为此控制器操作编写单元测试。
下一步是实现这个存储库:
public class ItemsRepositoryNHibernate : IItemsRepository
{
public IEnumerable<Item> GetItems()
{
throw new NotImplementedException(
"Out of the scope for this question. Checkout the NHibernate manual"
);
}
}
最后一步是指示您的依赖注入框架将存储库的正确实现传递给HomeController。例如,如果你使用Ninject,你需要做的就是编写一个模块来配置内核:
public class RepositoriesModule : StandardModule
{
public override void Load()
{
Bind<IItemsRepository>().To<ItemsRepositoryNHibernate>();
}
}
【讨论】: