Могу ли я передать viewdatadictionary(mymodel) в представление mvc? Как тогда получить к нему доступ?

Я чувствую себя действительно глупо, спрашивая об этом, конечно, я упускаю что-то действительно простое, но я просто не могу заставить это работать!

Я создал ViewDataDictionary как это в контроллере:

public ActionResult Index()
{
        var recipient = new Recipient() { 
            FullName = "John Brown",
            Company = "FP",
            Email = "name@website.com"
        };
        ViewData = new ViewDataDictionary(recipient);

        UserMailer.OnEventBook().Send();

        return View();
}

Но я не могу понять, как получить доступ к данным в представлении.

Я пробовал:

@ViewData["FullName"]

@ViewData.recipient["FulName"]

@ViewData[recipient.FullName]

@Model.FullName

@recipient.FullName

... и ряд похожих комбинаций. Кто-нибудь может указать мне правильное направление?

Обновить

Я понимаю, что мог бы просто пройти через использование ViewBag или ViewData["получатель"]. Но мне любопытно, как это сделать.

Ниже приведена документация для MvcMailer, и парень, который написал ее, похоже, знает свое дело, поэтому я подумал, что это должен быть правильный способ передачи данных.

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

Обновление 2

Я понял это неправильно.

MvcMailer выполняет вызов к действию внутри действия, и мне следовало установить ViewData в дополнительном действии (OnEventBook() в приведенном выше коде).

2 ответа

Решение

Сначала измените код контроллера на:

var recipient = new Recipient() { 
    FullName = "John Brown",
    Company = "FP",
    Email = "name@website.com"
};
ViewData["Recipient"] = recipient;

Затем в вашем представлении используйте следующий код:

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

В любом случае, если вы хотите использовать определенный объект для представления, используйте строго типизированное представление.

Обновить

Если вы все еще хотите использовать ViewDataDictionary, вы должны использовать следующий код для доступа к модели в вашем представлении:

@ViewData.Model.FullName

Вы можете передавать данные получателя как "Модель" из контроллера в представление
КОНТРОЛЛЕРЫ:

public ActionResult Index()
{

   var recipient = new Recipient()
   {
       FullName = "John Brown",
       Company = "FP",
       Email = "name@website.com"
   };


 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

Другие вопросы по тегам