C# 绕过控制器中的冗余代码

C# 绕过控制器中的冗余代码,c#,asp.net-mvc,code-duplication,C#,Asp.net Mvc,Code Duplication,我的控制器中有两个方法,它们是通过单击ajax调用的。两者都执行完全相同的操作(从数据库检索相同的数据),并返回部分视图以及包含检索到的数据的模型。唯一的区别是视野 public PartialViewResult FormA() { [...// Code] return PartialView("_FormA", ModelWithData) } public PartialViewResult FormB() { [...// same Code as in F

我的控制器中有两个方法,它们是通过单击ajax调用的。两者都执行完全相同的操作(从数据库检索相同的数据),并返回部分视图以及包含检索到的数据的模型。唯一的区别是视野

public PartialViewResult FormA()
{
    [...// Code]

    return PartialView("_FormA", ModelWithData)
}

public PartialViewResult FormB()
{
    [...// same Code as in FormA()]

    return PartialView("_FormB", ModelWithData)
}
两个视图使用相同的数据,但显示的内容不同

如果调用了
FormB()
FormA()
之前肯定调用过

必须有一种方法绕过第二个方法/数据库请求。由于额外的数据库请求,它明显降低了应用程序的速度

我的问题对我来说似乎很愚蠢,但我找不到解决办法


谢谢你的帮助

是的,通过向您的操作方法传递某种过滤器,如下面所示

public PartialViewResult ShowForm(string filter)
{ 
  if(TempData["model"]  == null)
  {  
    [...// Code]
   TempData["model"] = ModelWithData; 
  }
   if(filter == "some_condition")
    return PartialView("_FormA", TempData["model"] as ModelWithData);
   else
     return PartialView("_FormB", TempData["model"] as ModelWithData);
}

我明白你的意思了。您可以使用任何类型的状态管理机制。说
TempData

是,通过向您的操作方法传递某种过滤器,如下面所示

public PartialViewResult ShowForm(string filter)
{ 
  if(TempData["model"]  == null)
  {  
    [...// Code]
   TempData["model"] = ModelWithData; 
  }
   if(filter == "some_condition")
    return PartialView("_FormA", TempData["model"] as ModelWithData);
   else
     return PartialView("_FormB", TempData["model"] as ModelWithData);
}

我明白你的意思了。您可以使用任何类型的状态管理机制。说
TempData

基于此信息,我不能说这绝对是一个好建议,但可能是您可以将结果缓存在
FormA
中,然后在
FormB
中将其取出。您将引入一个新方法,根据需要从缓存获取或转到数据库。如果两者具有相同的代码,则需要将结果存储在缓存或TempData中,这将是减少数据库请求的一个很好的选择。不能仅在专用方法中提取共享代码?根据这些信息,我不能说这绝对是一个好建议,但可能是你可以将结果缓存在
FormA
中,然后以
FormB
的形式将其取出。您将引入一个新方法,根据需要从缓存获取或转到数据库。如果两者具有相同的代码,则需要将结果存储在缓存或TempData中,这将是减少数据库请求的一个很好的选择。不能仅在专用方法中提取共享代码?在这里,您还可以缓存从DB检索到的内容。