2014-02-19 3 views
0

나는 정말 부끄럽다. 정말 간단하다.하지만 나는 그저 작동하지 않는다.viewdatadictionary (mymodel)를 mvc 뷰로 전달할 수 있습니까? 어떻게 접근 할 수 있습니까?

나는 컨트롤러에서이 같은 ViewDataDictionary을 만들었습니다

public ActionResult Index() 
{ 
     var recipient = new Recipient() { 
      FullName = "John Brown", 
      Company = "FP", 
      Email = "[email protected]" 
     }; 
     ViewData = new ViewDataDictionary(recipient); 

     UserMailer.OnEventBook().Send(); 

     return View(); 
} 

하지만 뷰의 데이터에 액세스하는 방법을 작동하지 않을 수 있습니다.

@ViewData["FullName"] 

@ViewData.recipient["FulName"] 

@ViewData[recipient.FullName] 

@Model.FullName 

@recipient.FullName 

을 ... 유사한 조합의 수 :

나는 시도했습니다. 아무도 올바른 방향으로 나를 가리킬 수 있습니까?

업데이트

난 그냥 사용 ViewBag 또는을 ViewData [ "받는 사람"]를 통해 전달할 수 실현. 그러나 나는 그것을하는이 방법에 대해 궁금합니다.

다음은 docs for MvcMailer에서 왔으며 작성한 사람이 그의 물건을 알고있는 것으로 보이므로 데이터를 전달하는 올바른 방법이라고 생각했습니다.

var comment = new Comment {From = me, To = you, Message = "Great Work!"}; 
ViewData = new ViewDataDictionary(comment); 

업데이트 2

도현, 내가 잘못되었다.

MvcMailer는 작업 내에서 작업을 호출합니다. 하위 작업 (위의 코드에서 OnEventBook())에서 ViewData를 설정해야합니다. 당신이보기가 강하게을 사용하는 특정 개체를 사용하려면 어쨌든

@((Recipient)ViewData["Recipient"]).FullName 

: 다음 코드를 사용하여보기에 그런

var recipient = new Recipient() { 
    FullName = "John Brown", 
    Company = "FP", 
    Email = "[email protected]" 
}; 
ViewData["Recipient"] = recipient; 

:

답변

3

먼저 귀하의 컨트롤러 코드를 변경 유형보기.

업데이트 당신은 아직도 당신이보기에 모델에 액세스하려면 다음 코드를 사용한다 ViewDataDictionary 사용하려면

:

@ViewData.Model.FullName 
+0

감사 같은 것입니다. 그것은 다른 방법으로도 가능합니까? 질문을 세부 정보로 업데이트하십시오. –

+0

내 대답에 업데이트를 확인하십시오. – ssimeonov

+0

'@ ViewData.Model.FullName'은 null 참조 예외에서 런타임 바인딩을 제공합니다. 뷰에'@ model' 지시어를 추가하면 표준 null ref exp를 얻습니다. 하지만 ViewData로 전달되기 때문에 필요하지 않습니다. 맞습니까? –

2

당신이에서 "모델"로받는 데이터를 전송할 수 있습니다 뷰
컨트롤러 컨트롤러 :

public ActionResult Index() 
{ 

    var recipient = new Recipient() 
    { 
     FullName = "John Brown", 
     Company = "FP", 
     Email = "[email protected]" 
    }; 


return view(recipient); //return the recipient as obj model 
} 

인원 :

@model YourNameSpace.YourRecipientModelFolder.Recipient 
@{ 
    ViewBag.Title = "Home Index"; 
} 
<div>Model:</div> 
<div>@Model.FullName</div> 
<div>@Model.Company</div> 
<div>@Model.Email</div> 

참고 : YourNameSpace.YourRecipientModelFolder.Recipient이 MyMVC.Models.Recipient 답변 시간을내어

+0

답장을 보내 주셔서 감사합니다. 원래 버전의 질문에서 명확하지 않다는 점에 유감스럽게 생각합니다. 게시 된 방식이 유효한지 궁금합니다. 그렇다면 액세스하는 방법이 궁금합니다. –