我是TDD的新手,实际上,我正在尝试按照我的书中的示例( SportsStore - Pro ASP.NET MVC Framework / Steve Sanderson / APRESS )。我在第103-105页。
虽然有更多内容,但对于所有这些内容的新内容,我关注以下陈述。
ProductsController controller = new ProductsController(repository);
var result = controller.List(2);
//...
关于上述陈述,当我写这篇文章时(如书中所述),
var products = result.ViewData.Model as IList<Product>;
我收到编译错误“ System.Web.MVC.ActionResult”不包含ViewData的定义...... “但是,当我删除 List()从语句中,然后编译器错误消失。
var result = controller.List(2);//Doesn't work
var result = controller;//It works
那里有什么问题吗?我检查了Apress网站上的那本书,但没有列为勘误或问题。 所以我真的迷路了。
感谢您的帮助
答案 0 :(得分:8)
这是因为actionresult不包含viewdata howerver viewresult的定义,而viewresult实际上是一个actionresult,所以你可以将它转换为(ViewResult)然后获取viewdata
答案 1 :(得分:1)
var products = ((ViewResult)result).ViewData.Model as IList<Product>;
答案 2 :(得分:1)
您可能还缺少测试项目中的System.Web.Mvc库
答案 3 :(得分:0)
或者,您可以从以下位置更改Products Controller中的代码:
public *Action*Result List()
{
return View(productsRepository.Products.ToList());
}
为:
public *View*Result List()
{
return View(productsRepository.Products.ToList());
}
ViewResult是基类ActionResult的子类。