我创建了一个管理项目的MVC 3 Razor应用程序,并且应该在Sections
内管理Projects
。
所以,我创建了一个模型Projects.cs
,控制器ProjectsController
,并获得了一个Projects.sdf
数据表。工作得很好
然后我为Sections
添加了相同内容,但是Sections
应该有一个名为projectID
的字段(当然是这样做的)与ID
连接(加入)在Projects.sdf
;另外,我需要它能够按projectID
和DropDown
例如:使用DropDown
更改表数据。如果我说从项目列表中选择 project1 ,我希望列表显示Sections
中的所有Project
以及CRUD。
我已经尝试了几件但到目前为止没有工作,我知道如何在常规应用程序中执行此操作但不在MVC中执行此操作,因此我请求一些帮助。还尝试在DropDown
视图中添加Sections
并让其填充Project
模型数据,但一点也不好。
所以我需要帮助来解决这个问题:(
拜托,谢谢。
加成
项目有很多部分,是的,我使用的是EF,但正如我所说,对它没有太多经验。
至于数据上下文
这是Project
namespace MyProject.Models
{
public class Projects
{
public int ID { get; set; }
public string projectName { get; set; }
public string shortDesc { get; set; }
}
public class ProjectsDBContext : DbContext
{
public DbSet<Projects> Projects { get; set; }
}
}
这是Section
namespace MyProject.Models
{
public class Sections
{
public int ID { get; set; }
public int projectID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class SectionsDBContext : DbContext
{
public DbSet<Sections> Sections { get; set; }
}
}
添加2
所以我创建了一个名为MyProjectModels.cs
namespace MyProject.Models
{
public class Project
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class Section
{
public int ID { get; set; }
public int projectID { {get; set;}
public string Name { get; set; }
public string Description { get; set;}
}
}
所以基本上我有点想通了。请告诉我这是否适用于型号,还是需要将它们放在单独的文件中?另外,我应该如何从这一点声明上下文,提示就足够了:)
谢谢
这就是我做的方式。它显示正常,但我不知道如何利用它,例如在表格中显示不同的值...
<select id="select1" name="select1">
@foreach (var item in Model.Enrollments)
{
<option value=@Html.DisplayFor(modelItem => item.Course.Title)>@Html.DisplayFor(modelItem => item.Course.Title)</option>
}
</select>
表中的不同值我的意思是,当我在这种情况下选择不同的注册时。我想在表格中显示不同的值。
答案 0 :(得分:2)
你真的需要有不同的dbcontexts吗?如果它是一个sdf文件,那么我猜不是,你的dbcontext应该看起来像
namespace MyProject.Models
{
public class DatabaseContext: DbContext
{
public DbSet<Projects> Projects { get; set; }
public DbSet<Sections> Sections{ get; set; }
}
}
然后在您的项目模型中,您将拥有部分属性
namespace MyProject.Models
{
public class Projects
{
public int ID { get; set; }
public string projectName { get; set; }
public string shortDesc { get; set; }
public Sections section { get; set; }
}
}
您的部分只需要一个id字段
namespace MyProject.Models
{
public class Sections
{
public int ID { get; set; }
public int projectID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
}
只要您的sections类具有一个名为ID的主键字段或标记为主键的id属性,那么EF将实现Projects在表结构中具有section的外键的逻辑跳跃。然后,您的项目模型将可以访问section对象。我对EF的最大障碍是过度思考数据库方面的问题。
答案 1 :(得分:0)
对于下拉列表,这是我做的方式
public class ChangeUserNameViewModel
{
public ChangeUserNameViewModel()
{
var user = User.GetAllButBuiltIn();
Users = new SelectList(user, "UserName", "UserName");
}
public User User
{
get;
set;
}
[DisplayName("User Name")]
public SelectList Users
{
get;
set;
}
public string UserName
{
get;
set;
}
}
然后在视图中我引用了viewmodel
@model ChangeUserNameViewModel
@Html.DropDownList("UserName", Model.Users, "Choose")
第一个参数是html中下拉列表的名称。第二个选择列表填充它,第三个选择值。我确信有更好的方法可以做到这一点。例如,您可以在模型中使用IList,然后在视图中执行foreach循环。这一切都取决于你的情况下最有效的方法。