0

我觉得问这个真的很愚蠢,肯定我错过了一些非常简单的东西,但我就是无法让它工作!

我在控制器中创建了一个这样的 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”] 来传递它。但我很好奇这种方式。

以下来自MvcMailer的文档,编写它的人似乎知道他的东西,所以我认为它一定是传递数据的有效方式。

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

更新 2

呵呵,我看错了。

MvcMailer 在一个动作中调用一个动作,我应该在子动作中设置 ViewData(上面代码中的 OnEventBook() )。

4

2 回答 2

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
于 2014-02-19T15:19:52.023 回答
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

于 2014-02-19T15:45:27.993 回答