2013-08-04 2 views
0

내 작업에서 데이터베이스에서 일부 행을 삭제해야합니다. 하지만 예외가 발생하면 View를 현재 모델로 반환해야합니다.asp mvc 4. 컨트롤러에서 현재 모델 얻기

[HttpGet] 
    public ActionResult Delete(int id) 
    { 
     try 
     { 
      mDataMgr.DeleteUnit(id); 
     } 
     catch (DataManagerException ex) 
     { 
      if (ex.Error == DataManagerError.UnitHasMaps) 
      { 
       ModelState.AddModelError(String.Empty, "Unit has maps"); 
       UnitRegionsViewModel regionsVM = new UnitRegionsViewModel() 
       { 
        Regions = mDataMgr.UnitRegions(id), 
        UnitId = id 
       }; 

       return View("View", regionsVM); 
      } 
     } 

     return RedirectToAction("List"); 
    } 

데이터베이스에서 현재 모델을 다시로드해야합니다. 내 행동에서 현재 모델을 얻을 수있는 방법이 있습니까?

+0

델타보기 –

+0

에서 모델을 가져오고 싶다는 의미입니다. 예외가 발생하면 같은 모델로 동일한보기를 렌더링하고 싶습니다. 데이터베이스에 대한 쿼리가없는 경우 –

답변

1

"현재 모델"같은 것이 없습니다. 웹 페이지는 "무국적자"입니다. 페이지가 렌더링되면 모델을 포함하여 해당 페이지에 대한 모든 정보가 사라집니다. 그들이 정보를 얻기 원한다면 일반적으로 컨트롤러에 모델을 다시 게시합니다.

페이지에서 숨겨진 필드로 모델을 serialize 한 다음 해당 모델을 Delete 메서드의 매개 변수로 사용할 수 있습니다. 그러나 그 정보 중 어느 것이 민감한 것이라면, 이것은 당신이해야하는 것이 아닙니다.

+0

이것은 정답입니다. 그러나 페이지의 숨겨진 필드를 사용하는 경우 중요한 필드가 아닌 경우에도 해당 필드가 서버에 다시 게시되는 경우 해당 필드를 신뢰할 수 없다는 점을 기억하십시오. 사이트에서 사용자의 신용 카드 번호 (이미 승인 된)를 숨겨진 필드에 넣은 Slahdot의 한 웹 사이트에 대한 문제를 잠시 기억합니다. 이 시점에서 사용자는 카드 번호를 임의의 번호로 바꿀 수 있었고 서버는이를 신뢰할 수있었습니다. 그래서 ... 항상 당신의 의견을 확인하십시오! (@YuriMayorov) – JasCav

+0

@JasCav - 나는 그것이 민감하다고 생각합니다. 사용자 자신이 변경해서는 안되는 것은 민감합니다. –

0

또는 데이터베이스에서 해당 모델을 가져 와서 다시 보낼 수 있습니까? 당신이 할 수있는 이드가 있으니까요. 또는 더 좋은 방법은 삭제 작업이 전체 모델을 수락하도록하는 것입니다. 그렇게하면 DB에서 페치하지 않고 삭제가 실패하면 반환 할 수 있습니까? 또는 삭제가 실패하면 저장소의 delete 메소드가 전체 모델을 다시 전송해야합니까? 모두 할 수 있습니다.