2012-05-17 96 views
0

我刚刚学习MVC,并且有一个问题,我确定对除了我之外的每个人都是显而易见的;-)。我正在使用EF4和DbContext的MVC3,并在理解大部分基本功能方面取得了很大的成功。这是我的问题:在MVC3中路由

可以说我有2个表(公司&用户)和它们之间的一对多关系(外键公司ID)。

我的问题是:什么是在MVC中强制执行一对多关系的最佳方式?我不希望任何公司的任何人编辑任何用户。我只希望公司X中的人员修改他们自己的用户。

我正在尝试在特定公司中创建新用户。我不想在用户视图中使用标准EF模板(它为您提供公司下拉列表,因为它是一个外键)。我想确保我在/ Company/123456之前可以从该公司内部创建用户。

我看了一下ASP.NET路由,看看是否可以这样: /Company/123456/User/Create/- 它看起来不像它。 (看起来像我只能有一个控制器/动作/ ID)。我只是不确定在创建新对象时如何“记住”我们目前在Company 123456中。

Querystrings? (/用户/创建/?公司= 123456)。我应该创建另一个班级(公司用户)吗?如果是这样,我不确定路由的外观(CompanyUser/Create/123456)?

在此先感谢您的建议。

迈克

回答

3

对于/公司/ 123456 /用户/创建/它应该被配置为:

routes.MapRoute(
      "CreateCompanyUsers",                  
      "/Company/{companyId}/User/Create",       
      new { controller = "User", action = "Create" } 
     ); 

在这种情况下,/公司/ 123456 /用户/创建/会去一个动作那看起来像

public class UserController : Controller { 
    ... 
    public ActionResult Create(int companyId){ 
     ... 
    } 
} 
+0

谢谢!我会考虑使用你的解决方案! –

+0

最后一个问题:这是在视图中引用它的正确方法吗? @ Html.ActionLink(“创建新用户”,Model.UserId +“/用户/创建”,空,新{@class =“btn”}) –

+0

我认为最好的是使用这个重载:http:// msdn。 microsoft.com/en-us/library/dd504972.aspx。这会给你类似@ Htm.ActionLink(“创建新用户”,“创建”,“用户”,新{companyId = Model.CompanyId},新{@class =“btn”}) - 请注意,我把公司Id不同于userId – ivowiblo