2012-10-26 82 views
0

下面是我的控制器和視圖的摘要。我想從View中調用GetUserDistinguished方法。這只是美容。 Guid很醜,對最終用戶沒有意義,但它是我用於用戶的唯一ID。查看ASP.NET MVC3呼叫控制器方法

namespace Users.Controllers 
{ 
    public class UsersController : Controller 
    { 

     public ViewResult Index() 
     {  
      var users = db.Users.Include("Users");  
      return View(users.ToList()); 
     } 

     public string GetUserDistinguished(string Guid) 
     { 
      return ADHelper.ConvertGuidToDn(Guid); 
     } 
    } 
} 





@model IEnumerable<Test.GuidToDistinguishedName> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table> 
    <tr> 
     <th> 
      Name from Guid 
     </th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Guid) 
     </td> 
    </tr> 
} 

</table> 

回答

0

取決於你想要達到的目標,有兩種方法可以採取:

  1. 如果你想顯示的GUID對和專有名稱的頁面上你應該設置這樣的對的集合作爲觀點的一個模型。

  2. 如果您希望在用戶點擊某處時向用戶顯示可分辨的名稱,則應添加一個接受該GUID的操作,並將其專有名稱與其他所需數據一起設置爲另一個視圖的模型。

看看你的示例代碼,我不確定你的場景是什麼。

編輯:

基於您的評論,第一種方法是正確的:你需要準備的所有數據,在控制器的觀點,並把它放在模型。

您可以修改您的Index方法是這樣設置的GUID對和識別名(當然你可以隨時使用自己的自定義類作爲一種模式,如果你需要傳遞更多的數據 - 這甚至鼓勵):

public ViewResult Index() 
{  
    var users = db.Users.Include("Users").ToList();  
    var model = users.ToDictionary(u => u.Guid, u => GetUserDistinguished(u.Guid)); 
    return View(model); 
} 

在視圖中,那麼你可以遍歷對在表中顯示它們:

<table> 
    <tr> 
    <th> 
     Guid 
    </th> 
    <th> 
     Name 
    </th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Key) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Value) 
    </td> 
    </tr> 
} 

</table> 

不要忘記在頁面的頂部設置適當的型號,在我的情況:

@model Dictionary<string, string> 
+0

對不起,如果我不清楚我的問題。 我不確定您建議的兩種方法中的哪一種最適合我。我將記錄列表傳遞給視圖,然後將記錄顯示給用戶。我想讓用戶看到作爲可分辨名稱的guid列表。 我有功能在控制器中做到這一點,我只是不知道如何在foreach循環期間從視圖中調用函數,或循環通過控制器中的模型,並添加一個新變量來保存專有名稱列表中的每條記錄。 – Harleyz

+0

@ user1778009根據您的評論,我用一些示例代碼完成了我的答案,這些代碼可以幫助您實現目標。 –

+0

大聲笑,Thx爲您的輸入。我實際上希望從控制器中添加一個新的變量,就像佔位符一樣。因此每個記錄都可以添加專有名稱。原因是我正在使用EF Databasefirst。我猜這可能是不可能的。我對這一切都很陌生。謝謝! – Harleyz

0

視圖不應該調用控制器。這打破了MVC模式。

取而代之的是,讓您的控制器在將數據傳遞給視圖之前對數據進行必要的修改,並使視圖僅負責顯示數據和獲取新輸入。