0

我有一个视图模型,其中包含用户详细信息以及来自名为 User 和 UserDetails 的两个不同模型的扩展用户详细信息。

在我的 UsersController 中,我的 Details 方法有以下内容 -

public ViewResult Details(RegisterViewModel viewModel)
        {

            User currentuser = context.Users
                .Include("UserDetails")
                .Where(i => i.UserName == viewModel.UserName)
                .First();

            currentuser.UserDetails = new UserDetails();

            return View(currentuser);   
        }

在我的详细信息视图中,我从 -

@model TRS.ViewModels.RegisterViewModel

然后尝试从视图模型中列出详细信息,例如

<tr>
    <td>User Name</td>
    <td>@Model.UserName</td>

</tr>

但是当我转到用户的详细信息页面时,我收到了这个错误 -

Server Error in '/' Application.

Sequence contains no elements

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Sequence contains no elements

Source Error: 


Line 37:         {
Line 38:             
Line 39:             User currentuser = context.Users
Line 40:                 .Include("UserDetails")
Line 41:                 .Where(i => i.UserName == viewModel.UserName)

我显然做错了什么,但一直找不到。有任何想法吗?

4

1 回答 1

2

你做错了很多事情。第一个是您的 LINQ 查询,您在其中搜索数据库UserName中匹配的记录viewModel.UserName。但是,如果当您尝试.First()在最后调用该方法时此查询未返回任何结果,您将得到一个异常。所以你可以测试查询是否返回结果:

User currentuser = context.Users
    .Include("UserDetails")
    .Where(i => i.UserName == viewModel.UserName)
    .FirstOrDefault();
if (currentuser == null)
{
    // no records were found in the database that match this query
    return HttpNotFound();
}

您的代码有问题的另一件事是您的视图是强类型的,TRS.ViewModels.RegisterViewModel但您的Details控制器操作正在将User模型传递给无法工作的视图。您需要将视图模型传递给它。

此外,这个细节操作是如何调用的以及作为参数传递的视图模型的值是什么也不是很清楚。您确定将任何值传递给请求吗?否则,所有属性都将为空,这可能会解释为什么您的 LINQ 查询找不到任何记录。

于 2012-10-09T10:27:26.803 回答