Asp.net mvc 3 具有两个partialView和两个模型的视图

Asp.net mvc 3 具有两个partialView和两个模型的视图,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,在我的第一个MVC 3应用程序(在razor上)中,我不知道如何处理这种情况 我有一个页面,显示用户创建的目标列表。在该页面上,用户单击目标并进入目标详细信息屏幕。此屏幕显示目标的详细信息(目标名称、描述、状态)。它还显示了实现该目标的活动及其详细信息(活动名称、状态) 我在“目标”模型中有目标,在“ilpActivity”模型中有活动。这两者通过主键goals->goalID连接起来 我有两个部分视图:\u显示目标和\u活动 显然,displayGoal需要目标模型,而活动需要ilpActiv

在我的第一个MVC 3应用程序(在razor上)中,我不知道如何处理这种情况

我有一个页面,显示用户创建的目标列表。在该页面上,用户单击目标并进入目标详细信息屏幕。此屏幕显示目标的详细信息(目标名称、描述、状态)。它还显示了实现该目标的活动及其详细信息(活动名称、状态)

我在“目标”模型中有目标,在“ilpActivity”模型中有活动。这两者通过主键goals->goalID连接起来

我有两个部分视图:\u显示目标和\u活动 显然,displayGoal需要目标模型,而活动需要ilpActivity模型

其中每一个都使用ajax调用表单,允许编辑(以及创建活动)

在我的主要观点goalDetails中,我引用了goals模型

我的问题-我不能使用@Html.Partial调用\u活动,因为它使用不同的模型。我想我通过使用RenderAction清除了这个障碍——不过它在firefox中可以工作,但在IE中可以缓存。也就是说,除非我刷新屏幕,否则不会看到我所做的更改

我希望这是有道理的。。。基本上,我需要调用使用两个模型的两个partialView。我读了不少书,但很难把事情办好

是否禁用缓存?-我尝试了此操作,但duration=0会引发错误

我需要一个可以同时调用两个模型的模型吗?-我不确定这在模型和控制器中是什么样子。我拉一个目标的细节,同时拉一个活动列表

我很困惑,欢迎任何建议。下面是一些代码:

我的模型:

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();
        }
名称空间ILP.Models
{
公共类目标模型
{
#区域服务
公共接口服务
{
目标GetGoal(intid);
列出GetGoalActivity(int id);
}
公共类资产服务:IGALSSERVICE
{
私有目标DataClasseSDataContext qDB;
/// 
///引用数据上下文
/// 
公共资产服务()
{
qDB=新的goalsDataClassesDataContext();
}
#区域服务成员
公共目标GetGoal(int id)
{
返回qDB.goals.Single(g=>g.goalID==id);
}
公共列表GetGoalActivity(int id)
{
//返回目标“id”的所有活动
返回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);
    }
[授权]
公共行动结果视图目标(int goalID)
{
目标;
尝试
{
goal=qService.GetGoal(goalID);
}
接住
{
目标=新目标();
}
返回视图(目标);
}
[授权]
公共行动结果(国际目标)
{
列出活动;
尝试
{
活动=qService.GetGoalActivities(goalID);
}
接住
{
投
}
返回部分视图(活动);
}
然后我的观点是:

@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>
@model ILP.Models.goals
@*@{Html.RenderPartial(“_ActiveGoals”,Model);}*@
@Html.Partial(“_EditDisplay”,Model)

@{Html.RenderAction(“_Activities”,“Home”,Model.goalID);} @*@Html.部分(“_活动”,模型)*@
好吧-我修复了它。我不知道为什么会这样……但问题在于改变了partialview的javascript

    // Activity: Return to _Activities view
function getActivityList() {
    $.ajaxSetup({ cache: false });
    $('#activities').load('@Url.Action("_Activities", "Home", new { goalID = Model.goalID},null)');
}
// Activity: Submit activity form
function sendActivityForm() {
    $("#activityform").submit(function (e) {
        $.post($(this).attr("action"),
            $(this).serialize(),
            function (data) {
                //$("#thisGoal").html(data);
                if (data == '{"s":"success"}') {
                    getActivityList();
                }
                else
                    return false;
            });
        e.preventDefault();
    });
};
不起作用的是我在提交表格后直接接到的一个电话:

    // Activity: Submit activity form
function sendActivityForm() {
    $("#activityform").submit(function (e) {
        $.post($(this).attr("action"),
            $(this).serialize(),
            function (data) {
                //$("#thisGoal").html(data);
                if (data == '{"s":"success"}') {
                    $('#activities').load('@Url.Action("_Activities", "Home", new { goalID = Model.goalID},null)');                 }
                else
                    return false;
            });
        e.preventDefault();
    });
};

我不能说我理解-但这很有效…在IE和FF中,可能是@Html.RenderAction的功能?-即使在IE中,它也会在第一次从编辑屏幕提交时更新显示。但是,在调试模式下,我看到它不再在控制器中调用我的“\u Activities”方法(所以它在加载时和第一次编辑时调用它-然后再也不会调用它,除非我重新加载页面)。弄明白了!这是我的javascript…系统一允许我就会发布(再花7个小时回答自我发布)