查看两个偏见 - 和两个模型

时间:2011-09-15 17:06:22

标签: asp.net-mvc-3 razor

我对如何处理我的第一个MVC 3应用程序(剃须刀)中的情况感到茫然。

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

我在'目标'模型中有目标,在'ilpActivity'模型中有活动。这两者通过目标的主键连接 - > goalID

我有两个偏见:_displayGoal和_activities 显然_displayGoal需要目标模型,而_activities需要ilpActivity模型。

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

在我的主视图中,goalDetails,我引用了目标模型。

我的问题 - 我无法使用@ Html.Partial调用_activities,因为它使用了不同的模型。我以为我通过使用RenderAction清除了这个障碍 - 但是它可以在Firefox中使用但在IE中使用缓存。也就是说,除非我刷新屏幕,否则我看不到所做的更改。

我希望这是有道理的...基本上我需要调用两个使用两个模型的偏见。我读了很多但是努力让事情有效。

我是否禁用缓存? - 我试过了,但是持续时间= 0会抛出错误

我是否需要可以调用这两种型号的型号? - 我不确定模型和控制器中的样子。我在拉一个List<>的同时拉出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>

1 个答案:

答案 0 :(得分:0)

嗯 - 我修好了。我不确定我理解为什么这有效...但问题是围绕改变了部分视图的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