我有一个模型,它有一个参考数据的下拉列表。参考数据基于当前用户。因此,用户A看到他分配给他的记录,用户B可以看到不同的记录。关键是,参考数据基于userId。
userId在Session中。模型是否有办法访问会话变量? SelectionList的创建内置于模型中。所以,我可以将UserId作为参数放在构造函数中 - 但我需要在模型的所有构造函数中使用它。似乎重复工作。我更喜欢这个模型能够说'啊,当前用户是User1',但它是自己的。
可能?或者我是否有设计缺陷?
答案 0 :(得分:1)
这样的事情
public class WibbleModelBuilder
{
private int _userId;
private WibbleRepository _repo;
public WibbleModelBuilder(WibbleRepository wibbleRepository, int userId)
{
_repo=wibbleRepository;
_userId=userId;
}
public WibbleModel Build()
{
var model = new WibbleModel();
model.LookupList = _repo.GetLookupForUser(_userId);
return model;
}
}
现在,您可以在控制器中创建WibbleModelBuilder,并将您的存储库和用户标识传递给构造函数。您的模型现在只是一个非常简单的数据对象
public class WibbleModel
{
public IList<ReferenceData> LookupList { get; set;}
}