如何获取ViewResult的索引?

时间:2019-04-01 06:17:42

标签: c# asp.net unit-testing

我正在尝试创建一个单元测试,可以在其中验证选择查询。 我创建了一个伪数据库,并将电子邮件和用户名添加到其中。 我无法访问ViewResult的Email属性

尝试在ViewResult上使用索引时出现错误

  

不能将[]的索引应用于类型为'object'的表达式

获取该信息的操作是正确的,我可以使用Visual Studio 2015上的调试器对此进行验证。我收到一个ActionResult,然后我知道我必须将其强制转换为ViewResult。

在调试器中看到的

returnedResult->模型-> [0]->电子邮件

        var fakeDb = new FakeApplicationDbContext();
        fakeDb.FoundInformation = new FakeDbSet<FoundInformation>();
        var foundInformation = new FoundInformation { Email = "Test@Email.com", Username = "User1" };
        var foundInformation2 = new FoundInformation { Email = "Test2@Email.com", Username = "User2" };
        fakeDb.FoundInformation.Add(foundInformation);
        fakeDb.FoundInformation.Add(foundInformation2);


        FoundInformationController foundInformationController = new FoundInformationController(fakeDb);
        var returnedResult = (ViewResult)foundInformationController.Details(new 
            Search { SearchTerm = "User2" });
        var foundInfoEmail = returnedResult.Model[0].Email;

我遇到的错误在行中

var foundInfoEmail = returnedResult.Model[0].Email;

我将如何抓住该电子邮件以确认它是正确的?

2 个答案:

答案 0 :(得分:0)

您是否尝试过returnResult.Model.ToList()[0]。电子邮件?

答案 1 :(得分:0)

您需要将Model强制转换为所需的类型并访问该电子邮件属性。

例如,如果您在“详细信息”视图中返回列表或对象数组。

您可以像

一样访问该属性。
var returnedResult = (ViewResult)foundInformationController.Details(new 
        Search { SearchTerm = "User2" });
// if you return List then use like below and if you return an array then cast into array rather then list.
var model = returnResult.Model as List<Type of object Your return in Result> ;
var foundInfoEmail = model[0].Email;