前提・実現したいこと
C#でASP.NET MVC5を用いた掲示板機能を作成しようとしており、新規トピック作成機能の実装で、viewでユーザーが選択した値をDBに登録する機能を実装しようとしています。
ViewにRazorを用いて記した@HtmlxxxFor群の値をController側のActionResultに送るにはどうしたらよいでしょうか。
以下の例ですと、Razorで記した@Html.TextBoxForの.textプロパティの値をTopicテーブルのTitleに保存したいです。
初歩的な質問ではないだろうかということは承知なのですが自力で解決できないため、アドバイスを戴けないだろうかと思い投稿しました。宜しくお願いします。
追記
質問欄にていただいたことをもとに詳細を記しました。ご指摘ありがとうございます。
また、TextBoxForを用いていますが、プログラミング初心者の為有用なものの区別がついてないだけでこだわりはないです。
そのためEditFor等他の有用な方法でもご教授頂けるだけでたいへん有り難いです。
発生している問題・エラーメッセージ
The parameterized query '(@title nvarchar(4000)(' expects the parameter '@title', which was not supplied.
該当のソースコード
@Html.TextBoxFor( model => Model.Title, new { @name = "Title", @placeholder = "タイトルを入力してください" } ) @Html.ActionLink( "新規トピックを投稿する", // リンク・テキスト "NewTopicSubmit", // アクション名 "Forum" // コントローラー名 )
C#
1using System; 2using System.Configuration; 3using System.Data.SqlClient; 4using System.Web.Mvc; 5 6namespace Forum.Controllers 7{ 8 public class ForumController : Controller 9 { 10 // 上述したRazorのコードはNewTopic上にある 11 public ActionResult NewTopic() 12 { 13 return View(); 14 } 15 16 17 // 上述したHtml.ActionLinkの"新規トピックを投稿する"をクリックすると実行する 18 public ActionResult NewTopicSubmit() 19 { 20 21 string htmltitle = Request["Title"]; 22 23 // 接続文字列の取得。 24 var connectionString = ConfigurationManager.ConnectionStrings["ForumConnection"].ConnectionString; 25 26 27 using (var connection = new SqlConnection(connectionString)) 28 { 29 30 try 31 { 32 33 // データベースの接続開始 34 connection.Open(); 35 36 using (var transaction = connection.BeginTransaction()) 37 using (var command = new SqlCommand() { Connection = connection, Transaction = transaction }) 38 { 39 40 try 41 { 42 43 // 親テーブルを挿入するSQLの準備 44 command.CommandText = @"INSERT INTO Topic (Title) VALUES (@title)"; 45 command.Parameters.Add(new SqlParameter("@title", htmltitle)); 46 47 // 親テーブルを挿入するSQLの実行 48 command.ExecuteNonQuery(); 49 50 // コミット 51 transaction.Commit(); 52 53 54 } 55 catch 56 { 57 // ロールバック 58 transaction.Rollback(); 59 throw; 60 61 } 62 } 63 } 64 catch (Exception exception) 65 { 66 Console.WriteLine(exception.Message); 67 throw; 68 } 69 finally 70 { 71 // データベースの接続終了 72 connection.Close(); 73 } 74 } 75 return View(); 76 } 77 } 78}
C#
1using System.Collections.Generic; 2using System.Data.Entity; 3 4namespace Forum.Models 5{ 6 public class ForumModels 7 { 8 9 } 10 public class NewTopic 11 { 12 public string Nickname { get; set; } 13 public string Category { get; set; } 14 public string Region { get; set; } 15 public string Title { get; set; } 16 public string Comment { get; set; } 17 } 18 19 public class TopicTitle 20 { 21 public int Id { get; set; } 22 public string Title { get; set; } 23 } 24 25 public class ForumConnection : DbContext 26 { 27 public DbSet<TopicTitle> TopicTitles { get; set; } 28 } 29 30 public class MvcBasicInitializer : CreateDatabaseIfNotExists<ForumConnection> 31 { 32 protected override void Seed(ForumConnection context) 33 { 34 base.Seed(context); 35 36 var topics = new List<TopicTitle> 37 { 38 new TopicTitle 39 { 40 Id = 4, 41 Title ="たいとるー1" 42 } 43 }; 44 topics.ForEach(m => context.TopicTitles.Add(m)); 45 context.SaveChanges(); 46 } 47 } 48} 49
試したこと
webformでは用いることのできたname属性を一致させることでRequest[]に値を授受すること等は試したのですが.cshtmlファイルから.csファイルに値の受け渡しをすることはできませんでした。
補足情報(FW/ツールのバージョンなど)
VS2017
Windows7
.Net Framework 4.6.1
MVC5
テンプレートは用いてないです。
回答1件
あなたの回答
tips
プレビュー