У меня возникли проблемы с моим приложением. Когда пользователь динамически добавляет строки (javascript), чтобы добавить больше «претензий» к «требованию», значения «Отправлять» не отображаются, только значения «фиктивные», которые я изначально устанавливал в ViewModel, в первую очередь. Таким образом, в принципе все, что пользователь исправляет или действительно добавляет (новые строки), не записывается в POST.Правильная передача viewmodel - изменения не отображаются на POST
Насколько я могу судить, я просматриваю ViewModel между контроллером и представлениями, но, очевидно, что-то не хватает. Я боролся с этим какое-то время, ваша помощь была бы чрезвычайно оценена. Я новичок в ASP.NET MVC и вообще программирует в целом. Я слежу за блогом Стивена Сандерсона.
ViewModel
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>
Параметр 'Currentclaim' геттер свойство, кажется, всегда назначался фиктивную модель представления претензии к частной переменной, которая получает returnes. – defrost
Я попытался удалить эту ссылку на Currentclaim, тем самым пропустив в ClaimViewModel, но кажется, что ClaimViewModel имеет значение NULL. – mattbloke
Вы все еще видите 1,2,3 фиктивные строки претензии? Это будет означать, что код все еще используется. В противном случае, что вы получаете? – defrost