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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

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

Q&A

1回答

1182閲覧

スキャフォールディングで自動生成されたページのCreateボタン押下時エラー

kato_junnichi

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

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

0グッド

0クリップ

投稿2023/02/25 10:46

編集2023/02/26 03:45

実現したいこと

スキャフォールディングで自動生成されたページが正常に機能しません。

前提

ユーザーの追加機能を作成しています。
UserInfoモデルを元に新規スキャフォールディングを用いてAccountフォルダ内に生成されたCRUDファイルを使用しております。
([新しいスキャフォールディングの追加] >[Entity Framework を使用する Razor Pages (CRUD)]で作成)

発生している問題・エラーメッセージ

InvalidOperationException: Could not create an instance of type 'FunctionList.UserInfo'. Model bound complex types must not be abstract or value types and must have a parameterless constructor. Record types must have a single primary constructor. Alternatively, set the 'UserInfo' property to a non-null value in the 'FunctionList.Pages.Account.CreateModel' constructor.

該当のソースコード

UserInfo.cs

1namespace FunctionList 2{ 3 public class UserInfo 4 { 5 public string id { get; set; } 6 public string password { get; set; } 7 public string name { get; set; } 8 public UserInfo(string id, string password, string name) 9 { 10 this.id = id; 11 this.password = password; 12 this.name = name; 13 } 14 15 } 16} 17

pages/Account/Create.cshtml.cs

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Threading.Tasks; 5using Microsoft.AspNetCore.Mvc; 6using Microsoft.AspNetCore.Mvc.RazorPages; 7using Microsoft.AspNetCore.Mvc.Rendering; 8using FunctionList; 9using FunctionList.Data; 10 11namespace FunctionList.Pages.Account 12{ 13 public class CreateModel : PageModel 14 { 15 private readonly FunctionList.Data.FunctionListContext _context; 16 17 public CreateModel(FunctionList.Data.FunctionListContext context) 18 { 19 _context = context; 20 } 21 22 public IActionResult OnGet() 23 { 24 return Page(); 25 } 26 27 [BindProperty] 28 public UserInfo UserInfo { get; set; } 29 30 31 // To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD 32 public async Task<IActionResult> OnPostAsync() 33 { 34 if (!ModelState.IsValid) 35 { 36 return Page(); 37 } 38 39 _context.UserInfo.Add(UserInfo); 40 await _context.SaveChangesAsync(); 41 42 return RedirectToPage("./Account/index"); 43 } 44 } 45} 46

pages/Account/Create.cshtml

1@page 2@model FunctionList.Pages.Account.CreateModel 3 4@{ 5 ViewData["Title"] = "Create"; 6} 7 8<h1>Create</h1> 9 10<h4>UserInfo</h4> 11<hr /> 12<div class="row"> 13 <div class="col-md-4"> 14 <form method="post"> 15 <div asp-validation-summary="ModelOnly" class="text-danger"></div> 16 <div class="form-group"> 17 <label asp-for="UserInfo.id" class="control-label"></label> 18 <input asp-for="UserInfo.id" class="form-control" /> 19 <span asp-validation-for="UserInfo.id" class="text-danger"></span> 20 </div> 21 <div class="form-group"> 22 <label asp-for="UserInfo.password" class="control-label"></label> 23 <input asp-for="UserInfo.password" class="form-control" /> 24 <span asp-validation-for="UserInfo.password" class="text-danger"></span> 25 </div> 26 <div class="form-group"> 27 <label asp-for="UserInfo.name" class="control-label"></label> 28 <input asp-for="UserInfo.name" class="form-control" /> 29 <span asp-validation-for="UserInfo.name" class="text-danger"></span> 30 </div> 31 <div class="form-group"> 32 <input type="submit" value="Create" class="btn btn-primary" /> 33 </div> 34 </form> 35 </div> 36</div> 37 38<div> 39 <a asp-page="Index">Back to List</a> 40</div> 41 42@section Scripts { 43 @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} 44} 45

試したこと

下記を参考に自分のソースを確認しましたがどこが間違っているか分かりませんでした。。。
https://stackoverflow.com/questions/45194022/di-exception-in-asp-net-core-could-not-create-an-instance-of-type-myproject-da

補足情報(FW/ツールのバージョンなど)

環境
OS:Windows11
フレームワーク:.NET 6.0
ASP.NET Core Razor page

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/02/25 14:04

> ■■な機能を実装中に以下のエラーメッセージが発生しました。 [■■な機能」ってなんですか? そういう訳の分からない文章を見るとその先読む気力がわいてこない人は、自分だけじゃなくて他にも多々いると思いますよ。
YAmaGNZ

2023/02/26 02:49

テンプレの消し忘れやん
kato_junnichi

2023/02/26 03:44 編集

すみません。。テンプレとは何でしょうか。。 (追記:フォーマットが残っていたのですね。理解しました)
kato_junnichi

2023/02/26 03:51 編集

SurferOnWwwさん あなた嫁いびりする姑バリに突っかかってきますね。察せないのでしょうか。 やる気が失せるので言い方を考えるか、それができないなら二度と関わらないでください。 いちゃもん付けたいだけならヤフコメ行ってください。
退会済みユーザー

退会済みユーザー

2023/02/26 04:19 編集

いやいや、ヤフコメに行くのはあなたでしょう。 ここは https://teratail.com/help#about-teratail に書いてあるように "質問と回答を通してお互いに知識や情報を交換・共有する場所" "価値のあるコンテンツを世の中に残し届ける事を目的" としているとのこと。 だから、きちんと開発環境を書かない人、質問の修正依頼に答えない人、質問を書いたら書きっぱなしで見直すこともしない人、それを指摘されるとすぐ逆ギレする人には向いてないと思う。
kato_junnichi

2023/02/26 05:17 編集

はい分かりました。またもや揚げ足取りですね。 前回そう感じたならのそんな奴にはかかわらなければいいだけでは?笑 私は回答、エラーに対する意見が聞きたいのです。 私はあなたの説教欲を満たす道具でもなければ、優越感を満たすための道具でもありません。 荒らしとして通報いたしました。今後一切かかわらないでくださいね。
退会済みユーザー

退会済みユーザー

2023/02/26 06:11

揚げ足取りですって? いやいや、親切なアドバイスと思ってほしいですね。 "質問と回答を通してお互いに知識や情報を交換・共有する場所" "価値のあるコンテンツを世の中に残し届ける事を目的" に沿ってあなたが質問を書けるようにするための。 「私は回答、エラーに対する意見が聞きたい」なら質問をきちんと書きましょう。それをしないでそういうことを言うのは自分さえよければいいという自分勝手な話。 あと、スレッドに関わる関わらないは質問者が決めることではありません。
退会済みユーザー

退会済みユーザー

2023/02/26 08:51

質問文は直したようですので回答しておきます。
guest

回答1

0

エラーメッセージに、

must have a parameterless constructor.

と書いてあるように、UserInfo クラスに引数無しのコンストラクタを追加。すなわち、

C#

1public UserInfo() { }

を一行追加すれば解決するはずです。

質問のコードの _context.UserInfo.Add(UserInfo);public UserInfo(string id, string password, string name) を使おうとしたから失敗したということでしょう。
クライアントから送信されてきた id, name, password を使って UserInfo のインスタンスを生成する時に、 public UserInfo(string id, string password, string name) を使って失敗したということでしょう。

ただ、Create だけでなく、スキャフォールディングで生成された Index, Edit, Details, Delete は最初からダメだったはず。Create は入力画面は表示されるものの、入力して送信するとダメなはず。

何で Create の話だけしているのか疑問ですが。

投稿2023/02/26 08:55

編集2023/02/26 09:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問