質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

2回答

3400閲覧

ASP.NET Core 3 入門 にて Findページ追加

Yamato-Suzuki

総合スコア18

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2021/09/22 13:32

編集2021/09/23 10:13

ASP.NET CORE 3 入門 という書籍を購入し、
240ページで 困っています。内容です。

Model を作成

namespace SampleMVCApp.Models { public class Person { public int PersonId { get; set; } public string Name { get; set; } public string Mail { get; set; } public int Age { get; set; } } }

スキャホールディングまで実施→OK

Findページ 検索ページを
追加 - ビュー Razorビューにて追加

Viewページ
Find.cshtml

@model IEnumerable<SampleMVCApp.Models.Person> @{ ViewData["Title"] = "Find"; } <h1>Find</h1> <form asp-page="Find"> <div class="row"> <input type="text" name="find" class="col-10 form-control" /> <input type="submit" value="Find" class="col-2 btn btn-primary" /> </div> </form> <table class="table mt-5"> <thead> <tr> <th>PersonId</th> <th>Name</th> <th>Mail</th> <th>Age</th> </tr> </thead> <tbody> @foreach (var item in Model.People) { <tr> <td> @Html.DisplayFor(modelItem => item.PersonId) </td> <td> @Html.DisplayFor(modelItem => item.Name) </td> <td> @Html.DisplayFor(modelItem => item.Mail) </td> <td> @Html.DisplayFor(modelItem => item.Age) </td> </tr> } </tbody> </table>

Controllers 追加

public async Task<IActionResult> Find() { return View(await _context.Person.ToListAsync()); } [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Find(string find) { var People = await _context.Person.Where(m => m.Name == find).ToListAsync(); return View(People); }

ビューページの
@foreach (var item in Model.People)
にて、People 箇所でエラーとなり

CS1061 ‘IEnumerable<Person>’ に ‘People’ の定義がふくまれておらず、型 ‘IEnumerable<Person>’の最初の引数を受け付けるアクセス可能な拡張メソッド’People’がみつかりませんでした。

を解決できずにこまっています。
どなたか、この対応方法をご存知の方がいましたら助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yamato-Suzuki

2021/09/22 23:28

??? すみません。どなたか解る方がいらしましたら助かります。 最近、WebForm は使用していません。 とはいえ、MVCを習得しなければいけない状況で困っている次第です。
Yamato-Suzuki

2021/09/22 23:30

本日、夕方まで出張ですので 回答いただけるようでありましたら、夜、確認する次第です。 teratail の使い方を熟知していないのは、すみません。
退会済みユーザー

退会済みユーザー

2021/09/23 00:12

> ??? 言ってることが分かってないね。あなたが過去に立てたスレッドが多々クローズされないで放置・放棄状態になっているから、それを何とかしてほしいと言っているのだが。 https://teratail.com/questions/316096 https://teratail.com/questions/315236 https://teratail.com/questions/179139 https://teratail.com/questions/72361 https://teratail.com/questions/70334 解決したならそのことを書いて、解決に役に立った回答があればそれにベストアンサーをつけてクローズする。解決できずギブアップしたならその旨書いてクローズする。Teratail に限らず常識的に最後までフォローするのはマナー。 そういうことができない人には少なくとも自分は回答する気はしない。他の回答者も同じでは?
Yamato-Suzuki

2021/09/23 00:24

わかりました。 マナー知らずですみません。 出張から帰ってきましたら、対応します。
Yamato-Suzuki

2021/09/23 08:32

遅くなり申し訳ありません。 今頃ではありますが、対応しましたことを報告します。
退会済みユーザー

退会済みユーザー

2021/09/23 09:50

コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなりますので。インデントされてないコードは質問者さん自身も読む気がしないのでは?
Yamato-Suzuki

2021/09/23 10:13

``` 早速、活用させていただきました。 ありがとうございます。
guest

回答2

0

ベストアンサー

@foreach (var item in Model.People) ⇒ @foreach (var item in Model)

としてみてください。他に問題が無ければそれで動くと思います。

【追記】

こちらにアクセスして試してはいるのですが、

An unhandled exception occurred while processing the request.
InvalidOperationException: The relative page path 'Find' can only be used while executing a Razor Page. ...

のエラーとなってしまっています。

それは質問者さんの View のコードの <form asp-page="Find"><form asp-action="Find"> に修正すれば解決するはずです。

下のコメント欄に書いたようにエラーメッセージでググると以下の記事がヒットしますが、それで asp-page となっていることに気が付きました。

The relative page path 'About' can only be used while executing a Razor Page.
https://stackoverflow.com/questions/52020774/the-relative-page-path-about-can-only-be-used-while-executing-a-razor-page-sp

質問者さんの View のコードの @foreach (var item in Model.People) とか <form asp-page="Find"> は MVC ではなくて Razor Pages での書き方のようです。

どこからそのコードを持ってきたのですか? Visual Studio のスキャフォールディング機能を使ってそういうコードが生成されるとは思えないし・・・

自分で書いたのですか? それとも「ASP.NET CORE 3 入門 という書籍」に書いてあったとか?

投稿2021/09/23 09:48

編集2021/09/24 01:01
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yamato-Suzuki

2021/09/23 10:20

``` @foreach (var item in Model)  ``` にて対応し、 ``` https://localhost:44311/People/Find ``` こちらにアクセスして試してはいるのですが、 ``` An unhandled exception occurred while processing the request. InvalidOperationException: The relative page path 'Find' can only be used while executing a Razor Page. Specify a root relative path with a leading '/' to generate a URL outside of a Razor Page. If you are using LinkGenerator then you must provide the current HttpContext to use relative pages. Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.CalculatePageName(ActionContext context, RouteValueDictionary ambientValues, string pageName) ``` のエラーとなってしまっています。 なかなか上手くいかずにすみません。
退会済みユーザー

退会済みユーザー

2021/09/23 10:36

``` はコメント欄では効きません。 そのエラーは何か根本的に間違ったことをしているような感じで、何が問題か見当がつきません。その本を持っている人が、あなたのやったことをそのままやってみないと原因は分からないかもしれません。
Yamato-Suzuki

2021/09/23 10:45

コメント欄 了解いたしました。 ご確認ありがとうございます。 書籍には、著者の方の連絡先もありましたので確認してみます。
退会済みユーザー

退会済みユーザー

2021/09/23 10:52

> 書籍には、著者の方の連絡先もありましたので確認してみます。 それは時間の無駄かも。こことは違って、聞いても答えは返ってこないのではないかと思います。何にせよ、そちらで聞くのならここはクローズしてください。
Yamato-Suzuki

2021/09/23 11:11

すみません。 teratail 質問のクローズ方法を調べたのですが、どちらにも記載がなく 貴殿の回答をベストアンサーで終了しますことを、ご了承ください。 ありがとうございました。闇雲状態で、解決の糸口がわからないのが辛いですが、またの機会でお願いできましたら幸いです。
退会済みユーザー

退会済みユーザー

2021/09/23 11:36

私の回答で解決したわけではないので、私の回答のベストアンサーは解除して、自分で回答欄に「書籍には、著者の方の連絡先もありましたので確認してみます」と書いてそれにマークを付けてクローズしてください。 そして、もし著者から回答が来てその内容で解決できたのなら、それを回答欄に追記するようにしてください。
Yamato-Suzuki

2021/09/23 11:55

マナーをまだ完全に理解していなくて、すみません。 回答に投稿はできました。 解決はしていませんので、このままでよいですか? 著者の方には連絡だけはしてみました。回答がありましたら、解決済にするなどにします。 (本日、これにて業務終了します。ありがとうございました。)
Yamato-Suzuki

2021/09/24 00:31

ご連絡ありがとうございます。 Razorビュー ページの追加対応でたしかに実装しています。 本日の予定として、夜に確認できます。必ず確認し応対します。
退会済みユーザー

退会済みユーザー

2021/09/24 00:52

問題個所を見つけました。回答欄に追記しておきます。
Yamato-Suzuki

2021/09/24 03:51

ありがとうございます。 今夜にしか確認が出来ずにすみません。必ず確認し応対します。 記述は、書籍には MVCのビューページも RazorPage と同じ記述で記載ください。 を参考に、まだ理解が乏しい自分は素直に記載していました。 書籍は、Modelの受け取り方の違いだけの記載でしたので 書籍としては、”ここは自分で理解をしないといけない”ことかもしれません。 全てが未熟であること恐縮です。
退会済みユーザー

退会済みユーザー

2021/09/24 06:21

書籍を見ました。最初に Razor Pages で作った .cshtml を MVC に流用するように書いてありますが、今回問題になった部分は修正するように書いてないですね。 そこは「”ここは自分で理解をしないといけない”こと」ではなくて、本の著者がきちんと修正するよう書くべきところだと思います。
Yamato-Suzuki

2021/09/24 13:45

本当に本当にありがとうございます。 @foreach(var item in Model) と form asp-action="Find" の変更で、解決することができました。 著者の方からメールも届きました。 ただし、 @foreach(var item in Model) についての説明はいただけたのですが、 form asp-action="Find" については、説明をいただけませんでした。 今後、私のように困る人が現れないようにするためにも、修正いただけるようなメールを丁重に記載したいと思います。 本当に勉強になりました。私もSurferOnWwwさんのように日々精進いたします。 本当にありがとうございました。
guest

0

書籍には、著者の方の連絡先もありましたので確認してみます

投稿2021/09/23 11:51

Yamato-Suzuki

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/09/23 12:37

ある程度著者の質問を待っても回答が来ない場合はその旨書いて、ギブアップするならクローズ宣言してください。 著者から回答が来ないまま、このスレッドを放置するのは NG です。
Yamato-Suzuki

2021/09/23 12:40

了解いたしました。 教えていただきたいこととして、クローズ宣言する際に、このコメント欄でクローズと記載するだけでいいですか? それとも、解決しなくても「自己解決にする」をクリックしたほうがいいですか?
退会済みユーザー

退会済みユーザー

2021/09/23 12:48

> それとも、解決しなくても「自己解決にする」をクリックしたほうがいいですか? タイトルにクローズしたと明示してはいかがですか。
Yamato-Suzuki

2021/09/23 12:51

了解いたしました。 1週間(今月末)を目安にし、対応します。
Yamato-Suzuki

2021/10/07 23:29 編集

遅ればせながらの回答となりますが、 本件、書籍の内容がわからず投稿させていただき、 SurferOnWwwさんのおかげで解決できました。出版社の方にも連絡し 正誤表を掲載いただくことまで出来ました。 https://www.shuwasystem.co.jp/support/7980html/6050.html 感謝のコメントをここに記載します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問