2017-04-20 9 views
0

내 컨트롤러에는 클릭시 아약스를 통해 호출되는 두 가지 메소드가 있습니다. 둘 다 똑같은 일을합니다 (데이터베이스에서을 으로 검색). 검색된 데이터가 포함 된 모델과 함께 부분 뷰를 반환합니다. 유일한 차이점은보기입니다.컨트롤러에서 중복 코드 무시

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); 
} 

아래처럼 행동 방법에 필터의 일종을 전달하여 예 확인

+0

이 정보를 바탕으로 나는 이것이 분명히 좋은 조언이라고 말할 수는 없지만 결과를 'FormA'에 캐시하고 'FormB'에서 다시 가져올 수 있다고 생각할 수 있습니다. 캐시에서 가져 오거나 필요에 따라 데이터베이스로 이동하는 새로운 방법을 소개합니다. – Crowcoder

+1

둘 다 동일한 코드를 사용하면 결과를 캐시 또는 TempData에 저장해야 데이터베이스 요청을 줄일 수 있습니다. –

+0

Cant는 개인 코드에서 공유 코드를 추출합니까? 또한 DB에서 검색 한 항목을 캐시 할 수도 있습니다. –

답변

2

. 어떤 유형의 상태 관리 메커니즘을 사용할 수 있습니다. 말하기 TempData

+1

하지만이 방법으로 코드 양을 줄입니다. 그것은 여전히 ​​두 번 실행됩니다. 아니면 내가 틀렸어? –

+0

나는 데이터베이스를 두 번 호출하지 않기를 원한다고 생각한다. 심지어이 필터를 사용하면 코드가 뷰로 전달할 객체를 검색하기 위해 데이터베이스에 두 번 가야한다. –

+0

@ErikT., 지금 받으십시오. 도움이된다면 답을 편집하십시오. – Rahul