将控制器与模型连接以在视图页面中显示结果

时间:2013-03-27 18:47:17

标签: c# asp.net-mvc-4 viewmodel

所以我有这个aps.net mvc项目,我在其中创建了一个服务层,模型视图,控制器和一个视图页面。但我无法将结果显示到视图页面。我通过在服务层中传递一个特定的linq语句来启动它,所以我应该能够返回它以显示在视图上。这就是我所拥有的:

服务

public IEnumerable<RoleUser> GetUsers(int sectionID)
    {
        var _role = DataConnection.GetRole<RoleUser>(9, r => new RoleUser
        {
            Name = RoleColumnMap.Name(r),
            Email = RoleColumnMap.Email(r)
        }, resultsPerPage: 20, pageNumber: 1);
        return _role;
    }

型号:

public partial class Role
{
    public RoleView()
    {
        this.Users = new HashSet<RoleUser>();
    }
    public ICollection<RoleUser> Users { get; set; }
}

public class RoleUser
{
    public string Name { get; set; }
    public string Email { get; set; }
}

控制器:

public ActionResult RoleUser(RoleView rvw)
    {
        var rosterUser = new RosterService().GetUsers();
        ViewBag.RosterUsers = rosterUser;
        return View();
    }

查看:

<div>
<span>@Model.Name</span>
</div>

我不确定我错过了什么或做错了什么,但任何提示都会很棒。我基本上想要从我正在测试的linq语句中返回结果,看看连接是否正确,并且在增强之前是否存在功能。感谢...

1 个答案:

答案 0 :(得分:1)

好吧,如果我要删除你提供的代码,我会说我不确定这是如何编译的:

public partial class Role
{
    public RoleView()
    {
        this.Users = new HashSet<RoleUser>();
    }
    public ICollection<RoleUser> Users { get; set; }
}
感觉应该是:

public partial class RoleView

然后我会说在你的观点的顶部你错过了这个:

@model NamespaceToClass.RoleView

然后我会说你不能发出这个:

@Model.Name

因为RoleUser不是你的模特。您将需要遍历用户:

@foreach (RoleUser ru in Model.Users)

然后在该循​​环中你可以用这个构建一些HTML:

ru.Name

但我也会质疑你的控制器。现在它正在接收一个返回该模型的模型。这里缺少一些代码,但一般来说,在方法中:

public ActionResult RoleUser(RoleView rvw)

你实际上会获取数据,构建模型,然后返回:

var users = serviceLayer.GetUsers(...);

// now construct the RoleView model
var model = ...

return View(model);

根据我们的对话,您目前在控制器中有类似的内容:

public ActionResult View(int id) 
{ 
    // get the menu from the cache, by Id 
    ViewBag.SideBarMenu = SideMenuManager.GetRootMenu(id); 
    return View(); 
} 

public ActionResult RoleUser(RoleView rvw) 
{ 
    var rosterUser = new RosterService().GetUsers(); 
    ViewBag.RosterUsers = rosterUser; 
    return View(); 
}

但实际上需要看起来像这样:

public ActionResult View(int id) 
{ 
    // get the menu from the cache, by Id 
    ViewBag.SideBarMenu = SideMenuManager.GetRootMenu(id); 

    var rosterUser = new RosterService().GetUsers(); 
    ViewBag.RosterUsers = rosterUser; 

    return View(); 
} 

因为您正在点击此操作的侧边栏启动此页面,因为您在URL中传递了ID。 您甚至不需要其他操作。