我正在處理有關「目標」應用程序(屏幕抓取如下)的幾個表格。我使用MVC 3,剃鬚刀和linq。Linq - 引用子表
我使用的一個模型,goalsModel,找回我的數據:
public goals GetGoal(int id) { return qDB.goals.Single(g => g.goalID == id); }
我想活動可用,以及...在那裏我可以做這樣的事情:
public goals GetGoalActivities(int id) { return qDB.ilpActivities.Where(g => g.goalID == id); }
但是,這會返回一個錯誤。智能標籤不會顯示任何可用於ilpActivities的列。我已經看到了幾種在控制器中編寫代碼的方法,它是一個linq查詢 - 但如果可能的話,爲了保持一致性,我真的很想使用上面的格式。
下面是我一直試圖遵循的鏈接,可能會做我想做的。但請記住,我最終將編輯現有活動,創建新活動並刪除活動。鏈接:http://geekswithblogs.net/michelotti/archive/2007/12/30/118076.aspx
[編輯] 我無法發佈圖片作爲新用戶。我的表格包括goalID作爲目標的主鍵和ilpActivities中的外鍵。 ilpActivities具有activityID的主鍵。
[更新]
我的表看起來像這樣(簡化爲包括相關領域): 目標:goalID,GOALNAME,goalDescr ilpActivities:activityID,goalID,activityName
我有一個DBML文件:在設計模式下拖動表格後爲我生成的employeeDataClasses.dbml。它承認ilpActivities爲目標
我有一個goalsModel.cs文件孩子:
namespace ILP.Models
{
public class goalsModel
{
#region services
public interface IGoalsService
{
List<goals> GetAllGoals(string oprID);
bool CreateGoal(goals poll);
List<ilpGoalStatus> GetStatuses();
goals GetGoal(int id);
bool EditGoal(goals poll);
List<ilpActivity> GetGoalActivities(goals goal);
}
public class AssetService : IGoalsService
{
private goalsDataClassesDataContext qDB;
public AssetService()
{
qDB = new goalsDataClassesDataContext();
}
#region IGoalsService Members
public List<ilpActivity> GetGoalActivities (goals goal)
{
IEnumerable<ilpActivity> activities = from g in qDB.goals
join a in qDB.ilpActivities on g.goalID equals a.goalID
where a.goalID == goal.goalID
select a;
return activities.ToList();
}
在我的控制器:
namespace ILP.Controllers
{
public class HomeController : Controller
{
private goalsModel.IGoalsService qService;
public HomeController()
{
qService = new goalsModel.AssetService();
}
[Authorize]
public ActionResult _CreateActivity(int goalID)
{
//var status = qService.GetStatuses();
ViewBag.Status = new SelectList(qService.GetStatuses().ToList(), "goalStatusID", "goalStatus");
// not sure what to do here to get activity model in....
return PartialView();
}
在我創建活動partialview我只獲得了訪問目標模型:
@model ILP.Models.goals
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Create an Activity</legend>
<div class="editor-label">
@Html.LabelFor(model => model.goalName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.goalName)
@Html.ValidationMessageFor(model => model.goalName)
</div>
.... etc....
在我看來我需要訪問ilpActivitie的activityName s - 但唯一的選擇是來自目標表。
什麼是錯誤..它是爆炸的,因爲DataContext已經死了,當它試圖枚舉? –
否 - 它不「查看」我的子表(ilpActivities)的內容。因此,當我嘗試添加表單字段時:@ Html.Editorfor(a => a.ilpActivities.activityName) - 「activityName」未出現在智能標記中 –
看來您的最終問題與您的觀點相關。要將您的子表及其屬性傳遞給您的視圖,您需要將視圖傳遞給包含您的子表結構的模型。請張貼一些關於表格結構的細節,以及關於您想要傳遞給視圖的模型的結構,以及一些關於您的視圖的更詳細的代碼。如果我們能看到你想要完成的細節以及你的工作內容,建議如何填充你的模型要容易得多。 – counsellorben