Asp.net mvc 3 具有两个partialView和两个模型的视图
在我的第一个MVC 3应用程序(在razor上)中,我不知道如何处理这种情况 我有一个页面,显示用户创建的目标列表。在该页面上,用户单击目标并进入目标详细信息屏幕。此屏幕显示目标的详细信息(目标名称、描述、状态)。它还显示了实现该目标的活动及其详细信息(活动名称、状态) 我在“目标”模型中有目标,在“ilpActivity”模型中有活动。这两者通过主键goals->goalID连接起来 我有两个部分视图:\u显示目标和\u活动 显然,displayGoal需要目标模型,而活动需要ilpActivity模型 其中每一个都使用ajax调用表单,允许编辑(以及创建活动) 在我的主要观点goalDetails中,我引用了goals模型 我的问题-我不能使用@Html.Partial调用\u活动,因为它使用不同的模型。我想我通过使用RenderAction清除了这个障碍——不过它在firefox中可以工作,但在IE中可以缓存。也就是说,除非我刷新屏幕,否则不会看到我所做的更改 我希望这是有道理的。。。基本上,我需要调用使用两个模型的两个partialView。我读了不少书,但很难把事情办好 是否禁用缓存?-我尝试了此操作,但duration=0会引发错误 我需要一个可以同时调用两个模型的模型吗?-我不确定这在模型和控制器中是什么样子。我拉一个目标的细节,同时拉一个活动列表 我很困惑,欢迎任何建议。下面是一些代码: 我的模型: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
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个小时回答自我发布)