C# 绕过控制器中的冗余代码
我的控制器中有两个方法,它们是通过单击ajax调用的。两者都执行完全相同的操作(从数据库检索相同的数据),并返回部分视图以及包含检索到的数据的模型。唯一的区别是视野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
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检索到的内容。