我觉得这真是太愚蠢了,确定我错过了一些非常简单的东西,但我无法让它发挥作用!
我在控制器中创建了一个这样的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 [“recipient”]来传递它。但我很好奇这种做法。
下面是来自docs for MvcMailer,写它的人似乎知道他的东西,所以我认为它必须是传递数据的有效方式。
var comment = new Comment {From = me, To = you, Message = "Great Work!"};
ViewData = new ViewDataDictionary(comment);
更新2
是的,我弄错了。MvcMailer调用动作中的动作,我应该在子动作中设置ViewData(上面代码中的OnEventBook())。
答案 0 :(得分:3)
首先将您的控制器代码更改为:
var recipient = new Recipient() {
FullName = "John Brown",
Company = "FP",
Email = "name@website.com"
};
ViewData["Recipient"] = recipient;
然后在您的视图中使用以下代码:
@((Recipient)ViewData["Recipient"]).FullName
无论如何,如果你想在视图中使用特定对象,请使用强类型视图。
<强>更新强>
如果您仍想使用ViewDataDictionary,则应使用以下代码访问视图中的模型:
@ViewData.Model.FullName
答案 1 :(得分:2)
您可以将收件人数据作为“模型”从控制器传输到视图
控制器:
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