我对如何处理我的第一个MVC 3应用程序(在剃须刀上)的情况感到茫然。查看两个部分 - 两个模型
我有一个显示用户创建目标列表的页面。在该页面上,用户点击目标并进入目标详细信息屏幕。此屏幕显示目标的详细信息(目标名称,说明,状态)。它还显示导致该目标的活动及其细节(活动名称,状态)。
我在'ilpActivity'模型中有'目标'模型和活动的目标。目标主键 - > goalID
我有两个局部视图:_displayGoal和_activities 显然_displayGoal需要目标模型,而_activities需要ilpActivity模型。
这些中的每一个都使用ajax调用表单来允许编辑(以及为活动创建)。
在我的主视图goalDetails中,我引用了目标模型。
我的问题 - 我不能使用@ Html.Partial调用_activities,因为它使用了不同的模型。我以为我通过使用RenderAction清除了这个障碍 - 但它在Firefox中工作,但在IE中缓存。也就是说,除非我刷新屏幕,否则我所做的更改不会被看到。
我希望这是有道理的......基本上我需要调用两个部分使用两个模型。我读了很多,但一直在努力让事情发挥作用。
我禁用缓存吗? - 我试过但持续时间= 0会引发错误
我需要一个可以调用两种模型的模型吗? - 我不确定在模型和控制器中看起来像什么。我在拉动活动的列表<>活动时拉动1个目标的细节。
我很困惑,欢迎任何建议。下面是一些代码:
我的模型:
namespace ILP.Models
{
public class goalsModel
{
#region services
public interface IGoalsService
{
goals GetGoal(int id);
List<ilpActivity> GetGoalActivities(int id);
}
public class AssetService : IGoalsService
{
private goalsDataClassesDataContext qDB;
/// <summary>
/// reference the data context
/// </summary>
public AssetService()
{
qDB = new goalsDataClassesDataContext();
}
#region IGoalsService Members
public goals GetGoal(int id)
{
return qDB.goals.Single(g => g.goalID == id);
}
public List<ilpActivity> GetGoalActivities (int id)
{
//return all activities for goal 'id'
return qDB.ilpActivities.Where(g => g.goalID == id).
OrderBy(g => g.activityName)
.ToList();
}
我的控制器:
[Authorize]
public ActionResult ViewGoal(int goalID)
{
goals goal;
try
{
goal = qService.GetGoal(goalID);
}
catch
{
goal = new goals();
}
return View(goal);
}
[Authorize]
public ActionResult _Activities(int goalID)
{
List<ilpActivity> activity;
try
{
activity = qService.GetGoalActivities(goalID);
}
catch
{
throw;
}
return PartialView(activity);
}
然后我的观点:
@model ILP.Models.goals
<div id="thisGoal">
@*@{ Html.RenderPartial("_ActiveGoals", Model);}*@
@Html.Partial("_EditDisplay", Model)
</div>
<br />
<div id="activities">
@{Html.RenderAction("_Activities", "Home", Model.goalID);}
@*@Html.Partial("_Activities",Model)*@
</div>
也许是@ Html.RenderAction的功能? - 即使在IE中,它也会在编辑屏幕上首次提交时更新显示。然而,在调试模式下,我发现它再也不会在控制器中调用我的“_Activities”方法(所以它会在加载和第一次编辑时调用它 - 然后再也不会再次加载页面)。 –
想通了!这是我的JavaScript ...只要系统让我(7个小时以上回答自我发贴) –