質問編集履歴
4
エラー箇所追加
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
コード修正
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
コード追加
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追記しました。
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が取れない(?)ようです。。。
|