MVC-将泛型模型传递给方法
本文关键字:方法 模型 泛型 MVC- | 更新日期: 2023-09-27 18:00:12
我有一个函数FillPdf()
,我正在用它来填充一个可编辑的pdf。现在我已经定义了它的参数类型,但我有三种不同的形式,每种形式都有不同的模型,所以我想要的是我的这个FillPdf()
接收相应的模型并使用它的数据。如何实现这一点。
填充Pdf.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个以上的表单,每次我都必须用不同的参数类型编写相同的方法。
就我个人而言,我会创建一个通用接口
public interface IPdfContent
{
// Add your common properties here
}
然后让你的所有模型实现这个接口
public class HippaAuthForm : IPdfContent
{
}
现在,对于你的PdfFill
类,你可以这样做:
public static bool FillPdf(IPdfContent m2HUserDetails)
{
...
}
因为FillPdf
现在期望Interface
,所以现在可以将它传递给任何实现该Interface
的人。现在,您无需做任何工作即可创建新模型。
只需实现接口!
这也将允许你模拟你的模型,你可以更容易地进行单元测试,因为你现在已经有了DI。
我认为您的标题提供了解决问题的线索。
你所要做的就是
- 创建一个通用模型,让我们称之为
PdfDetailsModel
。这个模型类应该包含FillPdf()
方法中必须包含的信息 - 创建从
PdfDetailsModel
派生的特定模型类。该特定类将包含服务请求所需的附加信息。让我们称之为PdfDetailsHippaAuthModel
- 将
PdfDetailsHippaAuthModel
传递给接受基类对象的FillPdf
方法 - 由于
FillPdf()
依赖于基类,因此它对任何派生实例都很满意