2012-10-09 97 views
0

我有一個視圖模型,其中包含用戶詳細信息以及來自兩個不同模型(稱爲User和UserDetails)的擴展用戶詳細信息。從視圖模型返回單個用戶的詳細信息

在我UsersController我已經在我的詳細方法如下 -

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 

,然後嘗試列出從視圖模型例如在detials

<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) 

我明明做錯事,但一直沒能找到什麼。有任何想法嗎?

回答

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查詢沒有找到任何記錄。

+0

謝謝,細節操作是從索引頁面上的鏈接調用的,所以它類似於http:// localhost:49363/Users/Details/jsmith,其中jsmith是用戶名,因此我認爲會有相應的爲此在數據庫中輸入。我應該只是傳遞用戶名作爲參數,然後創建視圖模型的實例? –