1

アプリに問題があります。ユーザーが行 (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>
4

1 に答える 1