我可以将viewdatadictionary(mymodel)传递到mvc视图吗?怎么那么访问它?

时间:2014-02-19 15:15:20

标签: asp.net-mvc asp.net-mvc-views

我觉得这真是太愚蠢了,确定我错过了一些非常简单的东西,但我无法让它发挥作用!

我在控制器中创建了一个这样的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())。

2 个答案:

答案 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