2011-09-15 12 views
0

私の最初のMVC 3アプリ(カミソリで)の状況をどのように処理するかについては迷っています。2つのパーシャルビューと2つのモデルで表示

ユーザーが作成した目標のリストを表示するページがあります。そのページで、ユーザーはゴールをクリックし、ゴール詳細画面に移動します。この画面には、ゴールの詳細(ゴール名、説明、ステータス)が表示されます。また、その目標とその詳細(アクティビティ名、ステータス)につながるアクティビティを示します。

「目標」モデルと「ilpActivity」モデルのアクティビティの目標があります。 2は、目標の主キーによって接続されている - > goalID

私は2つのpartialviewsを持っている:_activitiesはilpActivityモデルを必要としながら、_displayGoalと_activities は明らか_displayGoalはゴールモデルを必要とします。

これらのそれぞれは、編集を許可するフォームへのajax呼び出しを使用します(アクティビティの作成も可能です)。

私の主な見解では、goalDetails、私は目標モデルを参照しています。

私の問題 - 別のモデルを使用しているため、_activitiesへの@ Html.Partial呼び出しを使用することはできません。私はRenderActionを使用してそのハードルをクリアしたと考えました - しかし、それはFirefoxで動作しますが、IEのキャッシュでは機能します。つまり、画面を更新しない限り、私が行った変更は見られません。

基本的には、2つのモデルを使用する2つの部分ビューを呼び出す必要があります。私はかなり読んだけど、物事を働かせるために苦労した。

キャッシングを無効にしますか? - これを試しましたが、継続時間= 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> 
+0

両方でおそらくそれは、@ Html.RenderActionの機能ですか? - IEの場合でも、編集画面からの最初の投稿の表示を更新します。しかし、デバッグモードでは、コントローラの "_Activities"メソッドを再び呼び出すことはありません(ロード時と最初の編集時に呼び出します)。 –

+0

それを実感!それは私のjavascriptだった...システムが私に(セルフポストに答えるために7時間以上) –

答えて

0

- 私はそれを修正しました。

:これは働いていた理由を私は理解し...しかし、問題は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

関連する問題