将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>
答案 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"/>