使用EF MVC3读取相关数据

时间:2012-05-10 15:12:23

标签: asp.net-mvc-3

我有以下内容:

public Class Vacancy{
   public int VacancyID {get;set;}
   public List<Application> Applications {get;set;}
}
public Class Applicant{
   public int ApllicantID {get;set;}
   public List<Application> Applications {get;set;}
}
public Class Application{
   public int ApplicationID {get;set;}
   public int VacancyID {get;set;}
   public int ApplicantID {get;set;}
   public virtual Applicant Applicant {get;set;}
   public virtual Vacancy Vacancy {get;set;}
 }
然后我创建了一个空缺模型控件。 我想做的事: 1)查看所有空缺 2)当选择空缺时,我想在同一页面显示其申请清单 3)当从上一步骤中选择申请时,我想获得申请人的详细信息 我试着用这个教程 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application 但是我不会去那里,我撞墙了,我很困惑atm

1 个答案:

答案 0 :(得分:3)

我很确定你不希望任何人在这里用A-Z编码。所以我在这里给你一些启动。我提供的解决方案的一半部分,让你自己完成剩下的工作。

首先,您的代码中存在一些拼写问题。 Class关键字应该是小写的。并且您应该使用相同的ID来创建外键引用。 (如果您的Application Class中有ApplicantId作为主键,则应在Applications类中使用相同的拼写。实体框架代码 - 当它看到相同的名称时,首先创建外键关系。)

假设您有DBContext这样的课程

public class YourDBContext:DbContext
{
    public DbSet<EFCodeFirst.Models.Vacancy> Vacancies { set; get; }
    public DbSet<EFCodeFirst.Models.Applicant> Applicants { set; get; }
    public DbSet<EFCodeFirst.Models.Application> Applications { set; get; }
}

列出所有职位空缺,创建名为“索引”的行动

public ActionResult Index()
{
   YourDBContext db = new YourDBContext();
   var allVacancies = db.Vacancies.ToList();
   return View(allVacancies);
}

所以我们应该有一个View for this action,我们需要显示所有职位空缺。因此,添加一个强类型的索引视图,就像这样的空缺模型集合

@model IEnumerable<EFCodeFirst.Models.Vacancy>

<h2> All Vacancies </h2>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<div id="divVacancies">
@foreach (var vacancy in Model)
{
  <p> @Html.ActionLink(vacancy.VacancyID.ToString(), "GetApplications","Job", new { @id = vacancy.VacancyID }, new {  @class = "ajaxLink" })</p>
}
</div>

<div id="divApplications"></div>

<script type="text/javascript">
    $(function () {
        $(".ajaxLink").click(function (e) {
            e.preventDefault();
            var target = $(this).attr("href");
            $("#divApplications").load(target);
        });
     });
</script>

在此视图中,我们包含了jQuery库的参考,我们将使用它来进行一些ajax调用。我们需要使用ajax显示同一页面中选定空缺的应用程序信息。为此,我们将在我们的Job控制器中以空缺id作为参数向另一个名为asynchronous的操作发出GetApplications请求。我们只是通过所有可用的空缺循环并在此创建一个Anchor标记。

返回Job控制器并创建一个名为GetApplications的Action方法。

    public ActionResult GetApplications(int id)
    {
        SampleContext db = new SampleContext();
        var allApplications = db.Applications.Where(x => x.VacancyID == id).ToList();
        return View(allApplications);
    }

很明显,我们正在查询获取所选空缺的所有申请,将其返回到视图。因此,我们需要使用以下内容创建名为GetApplications.cshtml的视图。

@model IEnumerable<EFCodeFirst.Models.Application>
<h2>Applications </h2>
@foreach (var application in Model)
{
 <p> @Html.ActionLink(application.ApplicantID.ToString(), "GetApplicants", new { @id = application.VacancyID, @class = "ajaxLink" })</p>
}

直接向前!只需在循环中打印结果即可。

就是这样。它应该工作。每当您单击空缺链接时,它将使用id作为参数调用GetApplications方法,该操作方法将返回带有HTML标记的视图,该标记列出该空缺id的所有应用程序。

一旦你这样做,你应该能够自己创建第二部分。这是相同的逻辑。您可能需要创建一个返回数据的类似GetApplicants操作方法。 祝你好运

注意:使用Firebug / fiddler查看哪些(ajax)请求将使用哪个参数执行操作方法。这将有助于您了解它的工作原理。