我正在尝试优化我的代码,并且我有一个方法,我想填充视图模型的下拉列表,具体取决于向该方法提供哪种类型的viewmodel。我这样做的原因是为了减少冗余代码。
我意识到我正在以一种javascript方式思考这个问题,所以我认为我正在努力实现这一目标。
这是伪代码,它不起作用,因为你无法根据我的理解改变C#中的类型:
解决这个问题的最佳方法是什么?
编辑从ViewModel添加了代码以澄清我的问题。 我试图从两种不同的控制器方法调用相同的方法,并为每个方法中的下拉菜单提供常用的选择列表。
以下是viewmodels中的常用代码:
[Display(Name = "What kind of Stuff?")]
public int? StuffId { get; set; }
public IEnumerable<SelectListItem> StuffTypes { get; set; }
以下是Controller的代码:
private void populateDropDownsPart2(Part2ViewModel part2viewmodel, PrintViewModel printviewmodel)
{
var currentviewmodel = (some initialization object);
if (part2viewmodel == null)
{
currentviewmodel = printviewmodel;
}
else
{
currentviewmodel = part2viewmodel;
}
var SomeDropDownContent = new SelectList(db.Stuff, "StuffId", "StuffName", studentmeddiet.StuffId);
currentviewmodel.SelectListOfStuff = SomeDropDownContent;
}
以下是来自不同观点的常用代码:
@Html.DropDownListFor(m => m.StuffId, Model.StuffTypes,"--Select--",new {name="StuffId" })
答案 0 :(得分:1)
从纯粹的设计角度来看,您需要一个界面:
public interface ISelectableListOfStuff
{
SelectList SelectListOfStuff;
}
您希望此方法使用的任何视图模型都应该实现该接口:
public Part2ViewModel : ISelectableListOfStuff
然后你的方法应该采用ISelectableListOfStuff:
private void populateDropDownsPart2(ISelectableListOfStuff selectableViewModel)
您可以调用该方法并传入实现ISelectableListOfStuff
接口的任何类型的对象。