MVC - 将通用模型传递给方法

时间:2015-06-29 08:34:37

标签: c# asp.net-mvc model

我有一个函数FillPdf(),我用它来填充可编辑的pdf。现在我已经定义了它的参数类型,但我有三种不同的形式,每种形式都有不同的模型,所以我想要的是我的FillPdf()接收相应的模型并使用它的数据。如何实现这一点。

FillPdf.cs

  public static bool FillPdf(M2HDetail m2HUserDetails)
    {
        try
        {
            if (PdfFileSettingViewModel.M2HAuthorizationFormLocation == null)
                return false;
            var pdfReader = new PdfReader(PdfFileSettingViewModel.M2HAuthorizationFormLocation);
            var sb = new StringBuilder();
            foreach (DictionaryEntry de in pdfReader.AcroFields.Fields)
            {
                sb.Append(de.Key.ToString() + Environment.NewLine);
            }
            var newFile = Path.Combine(PdfFileSettingViewModel.TempFolderLocation, string.Format("{0}_{1}.pdf", "M2HForm",SessionItems.UserId));
            System.IO.File.Copy(PdfFileSettingViewModel.M2HAuthorizationFormLocation, newFile);

            var pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create));

            var pdfFormFields = pdfStamper.AcroFields;
            var totalFields = pdfFormFields.Fields.Count;

            var myParams = new List<string>();

            #region # SetPdfFields #

            pdfFormFields.SetField("Text1", m2HUserDetails.LastName);
            pdfFormFields.SetField("Text2", m2HUserDetails.FirstName);
            pdfStamper.FormFlattening = false;

            #endregion

            pdfStamper.Close();

            return true;

        }
        catch (Exception ex)
        {
            var files = System.IO.Directory.GetFiles(PdfFileSettingViewModel.TempFolderLocation);
            foreach (var file in files)
            {
                System.IO.File.Delete(file);
            }

            return false;
        }

    }

来电者功能

 public ActionResult AuthorizationForm(M2HDetail model)
    {
      var isFillPdfSuccess = PdfFiller.FillPdf(model);
      return View();
     }

现在我希望我可以使用相同的pdf方法,如下所示:

 public ActionResult AuthorizationFormHippa(HippaAuthForm model)
    {
      var isFillPdfSuccess = PdfFiller.FillPdf(model);
      return View();
     }

此外,我希望我的pdf方法可以将参数作为模型,如下所示:

  public static bool FillPdf(ModelForm model)
{
 }

请建议如何实现这一目标。因为将来我可以有3个以上的表格,每次我必须用不同的参数类型编写相同的方法。

2 个答案:

答案 0 :(得分:2)

我个人会创建一个通用接口

#include

然后让所有模型实现此接口

public interface IPdfContent
{
    // Add your common properties here
}

现在,对于public class HippaAuthForm : IPdfContent { } 课程,您可以执行此操作:

PdfFill

由于public static bool FillPdf(IPdfContent m2HUserDetails) { ... } 现在期待FillPdf,您现在可以将任何实现Interface的人传递给它。现在,您可以创建新模型而无需进行任何工作。

只需实现界面!

这也可以让你模拟你的模型,你可以更容易进行单元测试,因为你现在已经有了DI。

答案 1 :(得分:-1)

我认为你的标题有解决问题的线索。

你要做的就是,

  1. 创建一个通用模型,我们称之为PdfDetailsModel。此模型类应具有FillPdf()方法中必须具有的信息。
  2. 创建源自PdfDetailsModel的特定模型类。此特定类将包含提供请求所需的其他信息。我们称之为PdfDetailsHippaAuthModel
  3. PdfDetailsHippaAuthModel传递给接受基类对象的FillPdf方法。
  4. 由于FillPdf()取决于基类,因此对任何派生实例都很满意。