Я не знаю, как справиться с ситуацией в моем первом приложении MVC 3 (на бритве).
У меня есть страница, на которой отображается список созданных пользователем целей. На этой странице пользователь нажимает на цель и выводится на экран сведений о целях. Этот экран показывает детали цели (название цели, описание, статус). Он также показывает действия, которые ведут к этой цели, и их детали (название деятельности, статус).
У меня есть цели в модели «целей» и действия в модели «ilpActivity». Эти два связаны первичным ключом целей -> goalID
У меня есть два частичных просмотра: _displayGoal и _activities
Очевидно, _displayGoal нужна модель целей, а _activities - модель ilpActivity.
Каждый из них использует ajax-вызовы для форм, которые позволяют редактировать (а также создавать для действий).
В моем основном представлении goalDetails я ссылаюсь на модель целей.
Моя проблема - я не могу использовать @ Html.Partial для вызова _activities, потому что он использует другую модель. Я думал, что преодолел это препятствие с помощью RenderAction - однако он работает в Firefox, но кэшируется в IE. То есть внесенные изменения не будут видны, пока я не обновлю экран.
Надеюсь, это имеет смысл ... в основном мне нужно вызвать два частичных представления, использующих две модели. Я прочитал довольно много, но изо всех сил пытался заставить вещи работать.
Отключить ли кэширование? - Я пытался это, но длительность = 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();
}
Мой контроллер:
[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>