質問編集履歴

4

エラー箇所追加

2015/09/29 23:31

投稿

f_horizon
f_horizon

スコア163

test CHANGED
File without changes
test CHANGED
@@ -57,3 +57,73 @@
57
57
  しかし画面に配置したボタンクリックでajaxによる部分ビューの再展開を行うと上記エラーが発生する。
58
58
 
59
59
  ```
60
+
61
+ 9/30追記
62
+
63
+ デバッグ不足で見落としがありました。ajaxから処理がControllerに移った際に、部分ビューHTMLを生成するために独自メソッドを呼び出しています。そこで、HttpContextのSessionが無くなって(newされて初期化されて)いました。
64
+
65
+ 少々長いですが、以下部分ビューHTML生成メソッドです。
66
+
67
+ ```
68
+
69
+ public static string RenderViewToString(this Controller controller,
70
+
71
+ string viewName, object viewData) {
72
+
73
+ //Create memory writer
74
+
75
+ var sb = new StringBuilder();
76
+
77
+ var memWriter = new StringWriter(sb);
78
+
79
+
80
+
81
+ //Create fake http context to render the view
82
+
83
+ var fakeResponse = new HttpResponse(memWriter);
84
+
85
+ var fakeContext = new HttpContext(HttpContext.Current.Request, fakeResponse);
86
+
87
+ var fakeControllerContext = new ControllerContext(
88
+
89
+ new HttpContextWrapper(fakeContext),
90
+
91
+ controller.ControllerContext.RouteData,
92
+
93
+ controller.ControllerContext.Controller);
94
+
95
+
96
+
97
+ var oldContext = HttpContext.Current;
98
+
99
+ HttpContext.Current = fakeContext;
100
+
101
+
102
+
103
+ //Use HtmlHelper to render partial view to fake context
104
+
105
+ var html = new HtmlHelper(new ViewContext(fakeControllerContext,
106
+
107
+ new FakeView(), new ViewDataDictionary(), new TempDataDictionary()),
108
+
109
+ new ViewPage());
110
+
111
+ html.RenderPartial(viewName, viewData);
112
+
113
+
114
+
115
+ //Restore context
116
+
117
+ HttpContext.Current = oldContext;
118
+
119
+
120
+
121
+ //Flush memory and return output
122
+
123
+ memWriter.Flush();
124
+
125
+ return sb.ToString();
126
+
127
+ }
128
+
129
+ ```

3

コード修正

2015/09/29 23:31

投稿

f_horizon
f_horizon

スコア163

test CHANGED
File without changes
test CHANGED
@@ -38,7 +38,9 @@
38
38
 
39
39
  追加コード
40
40
 
41
+ ```
42
+
41
- ```-- メインビューで以下を記述して部分ビューの呼び出し
43
+ -- メインビューで以下を記述して部分ビューの呼び出し
42
44
 
43
45
  @Html.Partial("部分ビュー")
44
46
 

2

コード追加

2015/09/29 02:49

投稿

f_horizon
f_horizon

スコア163

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,8 @@
3
3
  動作確認のため以下のようなメソッドを作成し、メインビューとメインビュー内にあるボタンクリックで呼び出される部分ビューから呼び出しています。
4
4
 
5
5
  ```public static bool SetSession()
6
+
7
+ public static test()
6
8
 
7
9
  {
8
10
 
@@ -33,3 +35,23 @@
33
35
  9/29追記:
34
36
 
35
37
  部分ビューはajaxで呼び出されるため、HttpContextが取れない(?)ようです。。。
38
+
39
+ 追加コード
40
+
41
+ ```-- メインビューで以下を記述して部分ビューの呼び出し
42
+
43
+ @Html.Partial("部分ビュー")
44
+
45
+
46
+
47
+ -- 部分ビューで以下を記述して上記メソッド呼出し
48
+
49
+ @namespace.Sample.test()
50
+
51
+ 結果 :
52
+
53
+ 最初に画面を開くと、メインビュー-部分ビュー-test()と動作し、画面にtrueが表示される。
54
+
55
+ しかし画面に配置したボタンクリックでajaxによる部分ビューの再展開を行うと上記エラーが発生する。
56
+
57
+ ```

1

9/29追記しました。

2015/09/29 02:48

投稿

f_horizon
f_horizon

スコア163

test CHANGED
File without changes
test CHANGED
@@ -27,3 +27,9 @@
27
27
  ```
28
28
 
29
29
  部分ビュー(html.Partial)からはSessionの利用に何か壁があるのでしょうか・・・どなたかご意見よろしくお願いいたします。
30
+
31
+
32
+
33
+ 9/29追記:
34
+
35
+ 部分ビューはajaxで呼び出されるため、HttpContextが取れない(?)ようです。。。