回答編集履歴

2

追記

2018/10/10 08:14

投稿

退会済みユーザー
test CHANGED
@@ -11,3 +11,447 @@
11
11
 
12
12
 
13
13
  質問者さんの環境で Ajax ヘルパーが使えるかどうかはわかりませんが。(だから、MVC のバージョン、使用したテンプレートを書くように言ったのですけど)
14
+
15
+
16
+
17
+ 【2018/10/10 17:14 追記】
18
+
19
+
20
+
21
+ 上に書いた私の想像はほぼ合っているということですので、それに沿った追加情報としてサンプル等を以下に追記します。
22
+
23
+
24
+
25
+ まず、Ajax ヘルパーが動くように設定されているか確認してください。
26
+
27
+
28
+
29
+ VS2015 のテンプレート作った MVC5 のプロジェクトで Ajax ヘルパーが動くようにするには、以下の記事の通り必要な NuGet パッケージのインストールと設定が必要です。VS2017 は未確認ですが多分同じと思います。確認してください。
30
+
31
+
32
+
33
+ MVC5 で AjaxHelper が働かない
34
+
35
+ [http://surferonwww.info/BlogEngine/post/2018/05/28/ajaxhelpers-do-not-work-on-mvc5-application-created-by-visual-studio-template.aspx](http://surferonwww.info/BlogEngine/post/2018/05/28/ajaxhelpers-do-not-work-on-mvc5-application-created-by-visual-studio-template.aspx)
36
+
37
+
38
+
39
+ 例として Microsoft が無償で提供しているサンプルデータベース AdventureWorksLT から、Visual Studio のウィザードを使って Entity Data Model を作って、その中の Customer テーブルを利用します。
40
+
41
+
42
+
43
+ ![イメージ説明](3034eb4370eb1814fd13825a9b0f6c51.jpeg)
44
+
45
+
46
+
47
+ 以下にサンプルコードをアップしておきます。以下のサンプルではボタンクリックで ajax 呼び出ししていますが、これを DropDownList の change イベントに変更するところは質問者さんの方で考えてください。
48
+
49
+
50
+
51
+ **Controller / Action Method**
52
+
53
+
54
+
55
+ ```
56
+
57
+ using System;
58
+
59
+ using System.Collections.Generic;
60
+
61
+ using System.Linq;
62
+
63
+ using System.Web;
64
+
65
+ using System.Web.Mvc;
66
+
67
+
68
+
69
+ namespace Mvc5App.Controllers
70
+
71
+ {
72
+
73
+ public class AjaxController : Controller
74
+
75
+ {
76
+
77
+ // 部分ビュー用のアクションメソッド
78
+
79
+ public ActionResult Details(int id)
80
+
81
+ {
82
+
83
+ // AdventureWorksLTEntities は Entity Data Model を生成した時に
84
+
85
+ // 同時に生成されるコンテキストクラス。
86
+
87
+ var db = new AdventureWorksLTEntities();
88
+
89
+
90
+
91
+ var details = (from c in db.Customer
92
+
93
+ where c.CustomerID == id
94
+
95
+ select c).FirstOrDefault();
96
+
97
+
98
+
99
+ return PartialView(details);
100
+
101
+ }
102
+
103
+
104
+
105
+ public ActionResult Index2()
106
+
107
+ {
108
+
109
+ var db = new AdventureWorksLTEntities();
110
+
111
+
112
+
113
+ // Take(10) としたのは単に長さを制限するため
114
+
115
+ var list = (from c in db.Customer
116
+
117
+ orderby c.CustomerID ascending
118
+
119
+ select new
120
+
121
+ {
122
+
123
+ id = c.CustomerID,
124
+
125
+ name = c.Title + " " + c.FirstName + " " + c.LastName
126
+
127
+ }).Take(10);
128
+
129
+ ViewData["customers"] = list;
130
+
131
+ return View();
132
+
133
+ }
134
+
135
+ }
136
+
137
+ }
138
+
139
+ ```
140
+
141
+
142
+
143
+ **ビュー Index2.cshtml**
144
+
145
+
146
+
147
+ ```
148
+
149
+ @{
150
+
151
+ ViewBag.Title = "Index2";
152
+
153
+ Layout = "~/Views/Shared/_Layout.cshtml";
154
+
155
+ }
156
+
157
+
158
+
159
+ <h2>Index2</h2>
160
+
161
+
162
+
163
+ @using (Ajax.BeginForm(
164
+
165
+ "Details",
166
+
167
+ new AjaxOptions { UpdateTargetId = "result" }))
168
+
169
+ {
170
+
171
+ @Html.DropDownList(
172
+
173
+ "id", // これにより Details(int id) の id に自動的にモデルバインディングされる
174
+
175
+ new SelectList(
176
+
177
+ (System.Collections.IEnumerable)ViewData["customers"],
178
+
179
+ "id",
180
+
181
+ "name",
182
+
183
+ "1"
184
+
185
+ )
186
+
187
+ )
188
+
189
+ <input type="submit" value="詳細表示" />
190
+
191
+ }
192
+
193
+ <div id="result"></div>
194
+
195
+
196
+
197
+ @section Scripts {
198
+
199
+ @Scripts.Render("~/bundles/jqueryval")
200
+
201
+ }
202
+
203
+ ```
204
+
205
+
206
+
207
+ **部分ビュー Details.schtml**
208
+
209
+
210
+
211
+ ```
212
+
213
+ @model Mvc5App.Customer
214
+
215
+
216
+
217
+ <div>
218
+
219
+ <dl class="dl-horizontal">
220
+
221
+ <dt>
222
+
223
+ @Html.DisplayNameFor(model => model.NameStyle)
224
+
225
+ </dt>
226
+
227
+
228
+
229
+ <dd>
230
+
231
+ @Html.DisplayFor(model => model.NameStyle)
232
+
233
+ </dd>
234
+
235
+
236
+
237
+ <dt>
238
+
239
+ @Html.DisplayNameFor(model => model.Title)
240
+
241
+ </dt>
242
+
243
+
244
+
245
+ <dd>
246
+
247
+ @Html.DisplayFor(model => model.Title)
248
+
249
+ </dd>
250
+
251
+
252
+
253
+ <dt>
254
+
255
+ @Html.DisplayNameFor(model => model.FirstName)
256
+
257
+ </dt>
258
+
259
+
260
+
261
+ <dd>
262
+
263
+ @Html.DisplayFor(model => model.FirstName)
264
+
265
+ </dd>
266
+
267
+
268
+
269
+ <dt>
270
+
271
+ @Html.DisplayNameFor(model => model.MiddleName)
272
+
273
+ </dt>
274
+
275
+
276
+
277
+ <dd>
278
+
279
+ @Html.DisplayFor(model => model.MiddleName)
280
+
281
+ </dd>
282
+
283
+
284
+
285
+ <dt>
286
+
287
+ @Html.DisplayNameFor(model => model.LastName)
288
+
289
+ </dt>
290
+
291
+
292
+
293
+ <dd>
294
+
295
+ @Html.DisplayFor(model => model.LastName)
296
+
297
+ </dd>
298
+
299
+
300
+
301
+ <dt>
302
+
303
+ @Html.DisplayNameFor(model => model.Suffix)
304
+
305
+ </dt>
306
+
307
+
308
+
309
+ <dd>
310
+
311
+ @Html.DisplayFor(model => model.Suffix)
312
+
313
+ </dd>
314
+
315
+
316
+
317
+ <dt>
318
+
319
+ @Html.DisplayNameFor(model => model.CompanyName)
320
+
321
+ </dt>
322
+
323
+
324
+
325
+ <dd>
326
+
327
+ @Html.DisplayFor(model => model.CompanyName)
328
+
329
+ </dd>
330
+
331
+
332
+
333
+ <dt>
334
+
335
+ @Html.DisplayNameFor(model => model.SalesPerson)
336
+
337
+ </dt>
338
+
339
+
340
+
341
+ <dd>
342
+
343
+ @Html.DisplayFor(model => model.SalesPerson)
344
+
345
+ </dd>
346
+
347
+
348
+
349
+ <dt>
350
+
351
+ @Html.DisplayNameFor(model => model.EmailAddress)
352
+
353
+ </dt>
354
+
355
+
356
+
357
+ <dd>
358
+
359
+ @Html.DisplayFor(model => model.EmailAddress)
360
+
361
+ </dd>
362
+
363
+
364
+
365
+ <dt>
366
+
367
+ @Html.DisplayNameFor(model => model.Phone)
368
+
369
+ </dt>
370
+
371
+
372
+
373
+ <dd>
374
+
375
+ @Html.DisplayFor(model => model.Phone)
376
+
377
+ </dd>
378
+
379
+
380
+
381
+ <dt>
382
+
383
+ @Html.DisplayNameFor(model => model.PasswordHash)
384
+
385
+ </dt>
386
+
387
+
388
+
389
+ <dd>
390
+
391
+ @Html.DisplayFor(model => model.PasswordHash)
392
+
393
+ </dd>
394
+
395
+
396
+
397
+ <dt>
398
+
399
+ @Html.DisplayNameFor(model => model.PasswordSalt)
400
+
401
+ </dt>
402
+
403
+
404
+
405
+ <dd>
406
+
407
+ @Html.DisplayFor(model => model.PasswordSalt)
408
+
409
+ </dd>
410
+
411
+
412
+
413
+ <dt>
414
+
415
+ @Html.DisplayNameFor(model => model.rowguid)
416
+
417
+ </dt>
418
+
419
+
420
+
421
+ <dd>
422
+
423
+ @Html.DisplayFor(model => model.rowguid)
424
+
425
+ </dd>
426
+
427
+
428
+
429
+ <dt>
430
+
431
+ @Html.DisplayNameFor(model => model.ModifiedDate)
432
+
433
+ </dt>
434
+
435
+
436
+
437
+ <dd>
438
+
439
+ @Html.DisplayFor(model => model.ModifiedDate)
440
+
441
+ </dd>
442
+
443
+
444
+
445
+ </dl>
446
+
447
+ </div>
448
+
449
+ ```
450
+
451
+
452
+
453
+ 実行結果は以下のようになります。赤枠で囲った部分が部分ビューです。
454
+
455
+
456
+
457
+ ![イメージ説明](4d066a206602891f7e643be6004c429a.jpeg)

1

訂正

2018/10/10 08:14

投稿

退会済みユーザー
test CHANGED
@@ -10,4 +10,4 @@
10
10
 
11
11
 
12
12
 
13
- 質問者さんの環境で Ajax ヘルパー使えるかどうかはわかりませんが。(だから、MVC のバージョンを書くように言ったのですけど)
13
+ 質問者さんの環境で Ajax ヘルパー使えるかどうかはわかりませんが。(だから、MVC のバージョン、使用したテンプレートを書くように言ったのですけど)