【问题标题】:Using multiple controllers in mvc在 mvc 中使用多个控制器
【发布时间】:2015-11-07 16:41:10
【问题描述】:

我正在构建一个管理特定公司员工的网络应用程序。我有两个控制器:StaffCompany。两个控制器都有标准的 CRUD 方法。

当我访问 URL sitename/Company/Staff/CompanyId 时,我想在我的详细信息视图中显示该公司雇用的所有员工。

Details() 方法的当前实现:

// GET: Company/Details/1
public ActionResult Details(int id)
{
    Company co = db.Company.Find(id);          
    return View(co);
}

如何修改我当前的 Details() 方法以支持这种行为?

【问题讨论】:

  • 这个网站怎么样 => asp.net/mvc
  • 我已经检查过了,但似乎没有什么适合我的需要?
  • 没有足够的信息来给出详细的答案。您是否有一种方法可以从您的数据库中检索特定数据并将其发送到视图(这听起来像您正在尝试做的事情)?可以贴代码吗?
  • 我已经发布了我的 Details 方法,但我也需要它来显示每个公司的员工。

标签: c# asp.net-mvc razor


【解决方案1】:

没有代码很难给你准确的答案,但如果我对每个控制器的理解正确,你就有一个与你的数据库相对应的模型。因此,如果您想在操作中使用来自 2 个或更多模型的数据,则必须使用 Linq 进行连接。

第一步,您创建一个包含公司和员工的 ViewModel:

public class MyViewModel
{
    public Company Company { get; set; }
    public Employee Employee { get; set; }
}

然后在你的控制器动作中你应该填充这个 ViewModel 并传递给视图,所以它看起来像这样:

[Route("Company/Staff/{id}")]
public ActionResult Details(int id)
{
    var viewModel = 
        from c in db.Company
        join e in db.Employee on c.CompanyId equals e.Id
        where c.CompanyId == id
        select new MyViewModel { Company = c, Employee = e };
    return View(viewModel);
}

View中的代码应该是这样的

    @model IEnumerable<YourAppName.Models.MyViewModel>
    @foreach (var item in Model)
    {
         <div> 
             <p>@item.Employee.Name</p>
         </div>
    }

【讨论】:

  • 这样做会给我所需的路由,例如此站点名称/公司/员工/公司 ID。我会上传代码,但我不确定有什么帮助。
  • @stackface 我使用 [Route("Company/Staff/{id}")] 更新了代码,因此当您输入 URL 站点名称/公司/员工/公司 ID 时,您将进入此操作
  • 谢谢,我目前在 Company 控制器中有一个 Details 方法,现在看起来像这样 // GET: Company/Details/1 public ActionResult Details(int id) { Company co = db.Company.Find(id); return View(co); } 那么我需要为详细信息创建一个新方法吗?还是调整一下?
  • @stackface 我更新了代码,创建了 ViewModel,然后像上面一样在操作中使用这个 ViewModel,然后在 View 中传递这个 ViewModel,你的代码可能有点不同(尤其是 View),但是我想你明白了。
  • 但是这样做不会影响我当前的详细信息方法吗?因为它当前显示所有找到的公司并将 co 传递给视图。通过执行您提供的操作,是否意味着我不会列出所有公司?
猜你喜欢
  • 1970-01-01
  • 2013-05-25
  • 2015-04-01
  • 2011-11-18
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多