我正在使用MVC 2.
我有5个视图模型,每个模型都有不同的消息属性,我需要从数据库填充。根据消息类型,属性名称不同。
在视图模型中,我有可用的类型,我需要为其提取消息。
如果类型是欢迎,那么我想拉3条欢迎消息。
我想编写一个我将从每个动作调用的泛型函数。然后,此泛型函数将查看正在传递的对象及其type属性,然后将填充此视图模型中指定的消息属性。 如何实现这一目标?从我的行动来看,我不想为每种消息类型调用单独的函数。
我正在尝试做以下事情:
public void GetMessage(object viewModel, bool isCheckMessages)
{
viewModel = (AnnualReportWelComeViewModel)viewModel;
}
但是此实例中的viewModel不会选择AnnualReportWelComeViewModel中指定的属性。
我是直接思考这个问题,还是仅仅考虑复杂而不是需要它?
答案 0 :(得分:1)
您的代码存在的问题是您在转换类型时重复使用相同的变量。您的viewModel
类型为object
,即使您尝试将其转换为其他类型,您仍会将其视为object
。你应该尝试这些方法:
public void GetMessage(object viewModel, bool isCheckMessages)
{
var reportMessage = viewModel as AnnualReportWelComeViewModel;
if (reportMessage != null)
{
// viewModel passed was of type AnnualReportWelComeViewModel
}
}
如果您希望此功能检查许多可能类型的viewModel
,那么您可以执行以下操作:
public void GetMessage(object viewModel, bool isCheckMessages)
{
if (viewModel is AnnualReportWelComeViewModel)
{
var reportMessage = viewModel as AnnualReportWelComeViewModel;
// ...
}
else if (viewModel is MonthlyReportWelComeViewModel)
{
var reportMessage = viewModel as MonthlyReportWelComeViewModel;
// ...
}
}
答案 1 :(得分:0)
您应该创建接口IViewModelWithMessage并从中继承所有viewmodel。
public interface IViewModelWithMessage
{
string Message { get; set; }
}
在视图模型中,您应该将继承的属性Message映射到此模型消息:
public class AnnualReportWelComeViewModel : IViewModelWithMessage
{
public string ViewModelMessage { get; set; }
....
string IViewModelWithMessage.Message {
get { return ViewModelMessage; }
set { ViewModelMessage = value; }
}
}
使用interface的Message属性执行您想要的操作,此值将传递给其他属性。
public void GetMessage(IViewModelWithMessage viewModel, bool isCheckMessages)
{
...
viewmodel.Message = ...
}