使用ViewData在剃刀视图中处理单个记录

时间:2011-12-14 23:32:31

标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor

将ASP.Net MVC3与C#一起使用。

目前我正在尝试将单个数据库记录传递到我的视图页面,创建自己的广告轮播器。

这是我的控制器代码。

var rand = new Random((int) DateTime.Now.Ticks);
int numIterations = 0;
numIterations = rand.Next(1, 2);

CJAd cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true && c.id == numIterations);

ViewData["SideBarAd"] = cjad;

我见过的每个代码示例都显示了如何遍历多个记录。如何将视图页面上的ViewData转换为数据库对象并显示它?

尝试了这个

@ViewData["SideBarAd"].ad_url

但收到了错误

CS1061:'object'不包含'ad_url'的定义,也没有扩展方法'ad_url'接受类型'object'的第一个参数(你是否缺少using指令或汇编引用?)< / p>

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

<div>@ViewBag.SideBarAd.SomeProperty</div>

其中SomeProperty是您要在视图中显示的CJAd类的属性。

话虽如此,我建议您使用视图模型而不是ViewData:

public ActionResult Foo()
{
    var rand = new Random((int) DateTime.Now.Ticks);
    int numIterations = 0;
    numIterations = rand.Next(1, 2);
    var cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true && c.id == numIterations);

    return View(cjad);
}

然后在相应的强类型视图中:

@model AppName.Models.CJAd
<div>@Html.DisplayFor(x => x.SomeProperty)</div>

同样,如果要在所有网页上展示广告,您可以查看Html.Action helper。它可以大大简化您的代码并将其与控制器的主逻辑分离。

答案 1 :(得分:1)

为什么不在视图模型中包含CJAd?这更简单。

但是,如果你确定了,请改用ViewBag,然后你就不需要施放。

ViewBag.SideBarAd = cjad;
在您的视图中

(假设SideBarAd是一个字符串,是您广告的网址)

<img src="@ViewBag.SideBarAd"/>