1

所以我有这个 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 语句中返回结果,以查看连接是否正确并且在增强之前功能是否存在。谢谢...

4

1 回答 1

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。您甚至不需要其他操作。

于 2013-03-27T19:00:31.820 回答