2012-10-26 114 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模式。

取而代之的是,让您的控制器在将数据传递给视图之前对数据进行必要的修改,并使视图仅负责显示数据和获取新输入。