【发布时间】:2011-09-12 19:25:09
【问题描述】:
我正在处理一些关于“目标”应用程序的表格(屏幕截图如下)。我正在使用 MVC 3、razor 和 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();
}
在我的创建活动部分视图中,我只能访问目标模型:
@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....
在我看来,我需要访问 ilpActivities 的 activityName - 但唯一的选项来自目标表。
【问题讨论】:
-
什么是错误.. 它是不是因为 DataContext 在尝试枚举时已经死了而爆炸?
-
否 - 它没有“看到”我的子表 (ilpActivities) 的内容。因此,当我尝试添加表单字段时:@Html.Editorfor(a => a.ilpActivities.activityName) - “activityName”不会出现在智能标签中
-
看来您的最终问题与您的观点有关。要将您的子表及其属性传递给您的视图,您需要向视图传递一个模型,该模型在其结构中包含您的子表。请发布一些关于你的表结构的细节,以及你想要传递给视图的模型的结构,以及一些关于你的视图的更详细的代码。如果我们可以看到有关您想要完成的内容以及您的工作内容的详细信息,那么建议如何填充您的模型会容易得多。
-
是的 - 我试过了 - 不幸的是我无法发布图片。我将尝试使用更多信息编辑我的帖子
-
当我对此进行深入研究时,似乎我需要(以某种方式)将我的子表包含在我的数据上下文中。 qDB = 新目标数据类数据上下文();将允许我访问 qDB.ilpActivities,但不能访问任何列,例如 qDB.ilpActivities.activityName;
标签: linq asp.net-mvc-3 razor