前提・実現したいこと
いつもお世話になっております。ASP.NET mvc5 掲示板を作っている初学者です。
スキャフォールディングして生成したIndexとCreateについて問題が生じ、解決できないので質問を投稿しました。
お手数ですが、回答をいただけたら嬉しいです。よろしくお願いします。
また、情報に不備等ありましたら加筆しますので、その旨も必要あれば一報ください。
発生している問題・エラーメッセージ
ルートパラメーターを持つCreate中にあるHtml.BeginForm(){}で挟まれた<input type="submit">をクリックすることでデータベースを更新し、Indexに遷移します。この際、ルーティングパラメーターをIndexに遷移しても引き継げていないという問題が生じています。
実際、次のようになります。(遷移後のアクションが省略されているがIndexには辿り着いている)
http://localhost:52463/Responses/Create/3
↓ (inputタグをクリック)
http://localhost:52463/Responses
該当のソースコード
Controller : ResponsesController
c#
1 2 // GET: Responses 3 [Authorize] 4 public async Task<ActionResult> Index(int? Id) 5 { 6 var responses = db.Responses.Include(r => r.AspNetUsers).Include(r => r.Topics).Include(r => r.Topics).Where(r => r.TopicId == Id); 7 ViewBag.Id = Id; 8 return View(await responses.ToListAsync()); 9 } 10 11 // GET: Responses/Create 12 public ActionResult Create(int? id) 13 { 14 var UserId = User.Identity.GetUserId(); 15 ViewBag.ResOwnerId = UserId; 16 ViewBag.TopicId = id; 17 return View(); 18 } 19 20 // POST: Responses/Create 21 [HttpPost] 22 [ValidateAntiForgeryToken] 23 public async Task<ActionResult> Create([Bind(Include = "Id,TopicId,Title,Contents,ResOwnerId,ResponseCount,ViewCount,RecentResDate,")] Responses responses) 24 { 25 if (ModelState.IsValid) 26 { 27 var RecentResDate = DateTime.Now ; 28 db.Responses.Add(responses); 29 await db.SaveChangesAsync(); 30 return RedirectToAction("Index", "Responses"); 31 } 32 33 ViewBag.ResOwnerId = new SelectList(db.AspNetUsers, "Id", "Email", responses.ResOwnerId); 34 ViewBag.TopicId = new SelectList(db.Topics, "Id", "Title", responses.TopicId); 35 return View(responses); 36 }
View : Create.cshtml
c#
1 2@using (Html.BeginForm( 3 "Create", 4 "Responses" 5 )) 6{ 7 @Html.AntiForgeryToken() 8 9 <div class="form-horizontal"> 10 <h4>Responses</h4> 11 <hr /> 12 @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 13 14 15 16 <div class="form-group"> 17 @Html.LabelFor(model => model.TopicId, "TopicId", htmlAttributes: new { @class = "control-label col-md-2" }) 18 <div class="col-md-10"> 19 @Html.TextBox("TopicId", (int)ViewBag.TopicId, new { @class = "form-control", @readonly = "readonly" }) 20 </div> 21 </div> 22 23 <div class="form-group"> 24 <div class="col-md-offset-2 col-md-10"> 25 <input type="submit" value="レスを投稿する" class="btn btn-default" /> 26 </div> 27 </div> 28 </div> 29} 30 31@section Scripts { 32 @Scripts.Render("~/bundles/jqueryval") 33} 34
試したこと
c#
1public async Task<ActionResult> Create(){}
中を
c#
1return RedirectToAction("Index", "Responses",ViewBag.TopicId);
に変えるなど色々な変数を試してルーティングパラメーターの変更を試みましたが、なにもint型の値は通りませんでした。
一方、全く求めるものとは違うのですが、
c#
1return RedirectToAction("Index", "Responses", "aaaaa");
等に変更すると、Indexへ遷移した時のUrlは次のようになりました。
http://localhost:52463/Responses?Length=5
補足情報(FW/ツールのバージョンなど)
VS2017
Windows7
.Net Framework 4.6.1
MVC5
回答1件
あなたの回答
tips
プレビュー