我有以下内容:
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
答案 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)请求将使用哪个参数执行操作方法。这将有助于您了解它的工作原理。