アプリに問題があります。ユーザーが行 (javascript) を動的に追加して「クレーム」に「クレームライン」を追加すると、投稿された値は表示されず、最初に ViewModel を最初に設定した「ダミー」値のみが表示されます。したがって、基本的に、ユーザーが修正または実際に追加するもの (新しい行) は、POST に記録されません。
私が見る限り、コントローラーとビューの間でViewModelを渡していますが、明らかに何かが欠けています。私はしばらくこれに苦労してきました。あなたの助けを大いに感謝します。私は ASP.NET MVC が初めてで、実際にプログラミング全般を行っています。スティーブン・サンダーソンのブログをフォローしています。
ビューモデル
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ef_tut.Models;
using ef_tut.ViewModels;
namespace ef_tut.ViewModels
{
public class ClaimViewModel
{
public int ClaimID { get; set; }
public int SubmissionUserID { get; set; }
public DateTime? DateSubmitted { get; set; }
public bool ApprovedYN { get; set; }
public DateTime? DateApproved { get; set; }
public ICollection<claimline> claimlines { get; set; }
}
}
コントローラ
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ef_tut.Models;
using ef_tut.DAL;
using ef_tut.ViewModels;
using ef_tut.WebUI.Helpers;
namespace ef_tut.Controllers
{
public class ClaimsController : Controller
{
private ClaimContext db = new ClaimContext();
private static ClaimViewModel _currentclaim;
private static ClaimViewModel Currentclaim
{
get
{
_currentclaim = GetClaimViewModel();
return _currentclaim;
}
set
{
_currentclaim = value;
}
}
public static ClaimViewModel GetClaimViewModel()
{
return new ClaimViewModel()
{
ClaimID =101,
claimlines = new List<claimline>() {
new claimline() {ClaimantUserID =1},
new claimline() {ClaimantUserID =2},
new claimline() {ClaimantUserID =3}
}
};}
public ActionResult Create()
{
return View(Currentclaim);
}
public PartialViewResult BlankEditorRow()
{
return PartialView("NewRow");
}
[HttpPost]
public ActionResult Create(ClaimViewModel ClaimViewModel)
{
Currentclaim = ClaimViewModel;
return View("View2", Currentclaim);
}
}
}
ビューを作成
@model ef_tut.ViewModels.ClaimViewModel
@using ef_tut.Models
@using ef_tut.ViewModels
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>claim</legend>
@Html.HiddenFor(model => model.ClaimID)
<ul id="editorRows">
@foreach (claimline claimline in Model.claimlines)
{
Html.RenderPartial("NewRow", claimline);
}
</ul>
<p>
@Html.ActionLink("Add another...", "BlankEditorRow", null, new { id = "addItem" })
</p>
</fieldset>
<input type="submit" value="Create" />
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
}
部分的
@model ef_tut.Models.claimline
@using ef_tut.WebUI.Helpers
@using (Html.BeginCollectionItem("claims"))
{
<table class="editorRow">
<tr >
<td>
ClaimID(claimlinetable)@Html.EditorFor(model => model.ClaimID)
</td>
<td>
ClaimantUserID: @Html.EditorFor(model => model.ClaimantUserID)
</td>
<td>
Hours: @Html.EditorFor(model => model.Hours)
</td>
<td>
<a href="#" class="deleteRow">delete</a>
</td>
</tr></table>
}
出力ビュー
@model ef_tut.ViewModels.ClaimViewModel
@using ef_tut.Models
@{
ViewBag.Title = "View2";
}
<h2>View1</h2>
@Html.HiddenFor(model=>model.ClaimID)
<ul>
@foreach (claimline claimline in Model.claimlines){
@claimline.ClaimantUserID; }
</ul>