Могу ли я передать 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