在C#中更改对象类型,或解决方法

时间:2014-12-16 21:52:17

标签: c# asp.net-mvc-4

我正在尝试优化我的代码,并且我有一个方法,我想填充视图模型的下拉列表,具体取决于向该方法提供哪种类型的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" })

1 个答案:

答案 0 :(得分:1)

从纯粹的设计角度来看,您需要一个界面:

public interface ISelectableListOfStuff
{
    SelectList SelectListOfStuff;
}

您希望此方法使用的任何视图模型都应该实现该接口:

public Part2ViewModel : ISelectableListOfStuff

然后你的方法应该采用ISelectableListOfStuff:

private void populateDropDownsPart2(ISelectableListOfStuff selectableViewModel)

您可以调用该方法并传入实现ISelectableListOfStuff接口的任何类型的对象。