2012-11-22 4 views
1

저는 첫 번째 ASP.NET MVC 4 애플리케이션을 작성 중이며 내가 한 일이 좋은 방법인가, 과잉 공격인가 아니면 단순한 바보 같은 짓인지에 대해 고심하고 있습니다.폼 게시 모범 사례

나는 일을 할 수있는 방법이 있지만 단지 모범 사례 지침을 찾고 있다는 것을 알고 있습니다.

기본적으로 내 인덱스보기는 간단한 양식을 렌더링합니다. POST에서는 PDF를 만들고 세션 및 ViewBag에 저장하고 확인 작업으로 전달합니다. 보기를 표시하는 데 모든 확인 작업이 사용됩니다 (Confirm.cshtml).

아무도 나를 안내 할 수 있습니까?

컨트롤러

public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(FormCollection formCollection) 
    { 

     // Create PDF 
     var doc = new Document(); 
     MemoryStream memoryStream = new MemoryStream(); 

     PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream); 

     doc.Open(); 
     doc.Add(new Paragraph("First Paragraph")); 
     doc.Add(new Paragraph("Second Paragraph")); 
     doc.Close(); 

     byte[] docData = memoryStream.GetBuffer(); // get the generated PDF as raw data 

     // create id and store data in Session 
     var id = Guid.NewGuid().ToString(); 
     Session[id] = docData; 

     // store the id in ViewBag 
     ViewBag.id = id; 

     return View("Confirm"); 
    } 

    // Handles the /Home/Confirm view 
    public ActionResult Confirm() 
    { 
     return View(); 
    } 

    public ActionResult Download(string id) 
    { 
     var docData = (byte[]) Session[id]; 

     if (docData == null) { 
      return HttpNotFound(); 
     } 

     Session[id] = null; 

     return File(docData, "application/pdf", "test.pdf"); 
    } 

} 

보기의 MVC 관점에서보기

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Confirm</title> 
</head> 
<body> 
    <div> 
     <a href="/Home/[email protected]">Download PDF</a> 
    </div> 
</body> 
</html> 
+1

코드 검토를 원하십니까? –

+0

나는 그렇다고 생각한다 ... – Zinc

답변

3

: ViewModels가로 얻을 수있는 좋은 방법입니다 사용

이, 이것 좀보세요 지도 시간.

http://www.asp.net/mvc/tutorials/older-versions/nerddinner/use-viewdata-and-implement-viewmodel-classes

장점 :

보기 모델은 모델 클래스에서보기를 분리하고 모델 독립적 뷰의 진화를 허용한다.

이렇게하면보기 서식 파일 내에서 형식 안전성, 컴파일 타임 검사 및 편집기 인텔리 센스를 사용할 수 있습니다.

보안 개체를 ORM에서보기로 직접 노출하면 IsAdmin과 같은 속성이 조작 될 수 있습니다.보기 모델을 사용하여이를 제한 할 수 있습니다.

return RedirectToAction("Confirm"); 

Becuase : 나는 색인 사후 조치

return View("Confirm"); 

에 바꿀 것

뭔가

포스트/리디렉션/(PRG)는 웹 개발 디자인 가져 오기 일부 중복 양식 제출을 방지하는 패턴

+1

나는 이해한다 -하지만 내가 할 때이 ViewBag는 더 이상 작동하지 않는다 ?? – Zinc

+0

ViewModels를 사용하는 또 다른 이유는 매개 변수로 모델을 리디렉션하고 전달할 수 있습니다. return RedirectToAction ("Confirm", Model); ViewBag와 유사한 대안으로 TempData [ "key"]는 http 요청이 있기 전까지 계속 유지되며 그 이후에 자동으로 삭제됩니다. 구문은 ViewData와 같습니다. 추가 정보 : http://www.devcurry.com/2012/05/what-is-aspnet-mvc-tempdata.html – SimonGates

+0

아직 시도하지 않았지만 내가 필요한 것이 정확하게 들리면 대답을 받아 들일 것입니다. 감사! – Zinc