MVC - 将模型从控制器传递到类

时间:2014-07-28 11:36:46

标签: asp.net-mvc

我想从我的控制器发送一封电子邮件,调用位于EmailHelper类中的静态函数。作为参数,我想使用我的模型,所以我可以这样称呼它:

EmailHelper.SendEmail(MyModel model)

我只需要通过不同模型在很多地方调用该函数。怎么实现呢?

2 个答案:

答案 0 :(得分:1)

您应该使用模型的接口(例如IEmailModel)

public interface IEmailModel{
  string propertyUsedByHelper {get;set;}

}
public class MyModel: IEmailModel{
  public string propertyUsedByHelper {get;set;}

}

那么你的助手就会做到这一点

EmailHelper.SendEmail(IEmailModel model)

public static class EmailHelper {
  public void SendEmail(IEmailModel model)
  {
    IEmailModel m = model;
    string prop = m.propertyUsedByHelper;
  }
}

BTW您的需求是典型的交叉问题,因此管理此需求的最佳方法是aspect oriented programming,请查看PostSharp中的拦截或Castle dynamic proxy

答案 1 :(得分:1)

我建议您使用特定的电子邮件模型,并将控制器内的特定模型转换为用于电子邮件的模型。这样,无论使用的模型和项目如何,都可以重复使用该函数。

从特定模型创建电子邮件模型并保持代码可读的一种方法是使用Extension方法类,为电子邮件提供转换方法

public static class EmailConverters
{
    public static EmailModel ToEmail(this MyModel model)
    {
        // Create a new EmailModel based on MyModel fields and return that
    }
}

这样在你的控制器上你可以编写如下内容:

EmailHelper.SendEmail(model.ToEmail())

还有其他方法可以做到这一点,特别是使用AutoMapper等类似的库,但对于电子邮件,我会说它们可能有点过分。

相关问题