Asp.net mvc 4 视图模型的某些项在视图和控制器之间丢失
问题是,我的ViewModel有12个项目。在Chrome浏览器中,我可以看到(回发请求-->标题-->表单数据上的网络-->klick),所有12项都有修改过的值,我想保存在控制器中。但在控制器中,只有9个项目的内容到达。其他三个在哪里?模型的容量为16,但9到15之间的其他项设置为空 如何找出回发期间视图和控制器之间发生的情况 更新 好的,现在我发现ModelState并不包含所有项,但是信息将被传输到请求-->表单容器中的控制器。让我们看看,丢失的项如何也将被转移到ModelState 视图模型Asp.net mvc 4 视图模型的某些项在视图和控制器之间丢失,asp.net-mvc-4,post,view,controller,Asp.net Mvc 4,Post,View,Controller,问题是,我的ViewModel有12个项目。在Chrome浏览器中,我可以看到(回发请求-->标题-->表单数据上的网络-->klick),所有12项都有修改过的值,我想保存在控制器中。但在控制器中,只有9个项目的内容到达。其他三个在哪里?模型的容量为16,但9到15之间的其他项设置为空 如何找出回发期间视图和控制器之间发生的情况 更新 好的,现在我发现ModelState并不包含所有项,但是信息将被传输到请求-->表单容器中的控制器。让我们看看,丢失的项如何也将被转移到ModelState 视
public class ViewModel
{
public List<tool.Models.Issue> OpenIssue { get; set; }
public List<tool.Models.Issue> AllIssuesExceptOriginal { get; set; }
public List<tool.Models.Issue> ClosedIssue { get; set; }
public tool.Models.Site Site { get; set; }
public int ID { get; set; }
}
查看(要复杂得多)
for(int i=0;i@DisplayFor(modeleItem=>OtherIssues[a].Description,new{@class=“meeting”}) p、 Id==OtherIssues[a].Id)“onclick=“markActiveLinkDelete(this);”> @Html.HiddenFor(modelItem=>modelItem.AllissueExceptOriginal[Model.AllissueExceptOriginal.FindIndex(p=>p.Id==OtherIssues[a].Id)]。说明) } } } @Html.TextAreaFor(modelItem=>modelItem.AllissueExceptOriginal[Model.AllissueExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace(“更新的:,”)==Model.OpenIssue[i].Id.ToString()))。说明,新建{@class=“meeting”}) @Html.HiddenFor(modelItem=>modelItem.AllissueExceptOriginal[Model.AllissueExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace(“更新:”,“”)==Model.OpenIssue[i].Id.ToString())].InternalNotes) } }
提前感谢您的帮助。为了解决这个问题,我为模型的每个项目添加了一个带有索引器的隐藏字段 视图已更新
@if( Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Count() != null)
{
for (int a = 0; a < Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).Count(); a++)
{
var OtherIssues = Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).OrderBy(p => p.LastUpdate).ToList();
if(OtherIssues[a].Description != "noUpdate")
{
//content
}
//This is new
@Html.HiddenFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)].Id)
}
}
@if(Model.allissueexceptoriginal.Where(p=>p.InternalNotes.Replace(“Updated:”,“”))==Model.OpenIssue[i].Id.ToString()).Count()!=null)
{
对于(int a=0;ap.InternalNotes.Replace(“更新:”)==Model.OpenIssue[i].Id.ToString())。除了(Model.allissueexceptoriginal.Where(l=>l.LastUpdate==DateTime.MinValue)).Count();a++)
{
var OtherIssues=Model.AllIssuesExceptOriginal.Where(p=>p.InternalNotes.Replace(“Updated:”)==Model.OpenIssue[i].Id.ToString())。除了(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate==DateTime.MinValue)).OrderBy(p=>p.LastUpdate.ToList();
if(其他问题[a]。说明!=“无更新”)
{
//内容
}
//这是新的
@Html.HiddenFor(modelItem=>modelItem.AllissueExceptOriginal[Model.AllissueExceptOriginal.FindIndex(p=>p.Id==OtherIssues[a].Id)].Id)
}
}
显示您的代码。我们无法猜测您做错了什么。哪个集合属性没有绑定?如果您只引用AllissueExceptOriginal
,那么您的代码很可能生成非连续的索引器,因此绑定将失败,除非您包含索引器的输入啊,谢谢您……我没有想到这一点。
@for (int i = 0; i < Model.OpenIssue.Count(); i++)
{
@Html.HiddenFor(modelItem => modelItem.OpenIssue[i].Id);
//a lot more HiddenFor fields
Model.AllIssuesExceptOriginal.Capacity = Model.AllIssuesExceptOriginal.Count;
var History = Model.OpenIssue[i].Histories.Where(p => p.IssueId == Model.OpenIssue[i].Id).OrderByDescending(a => a.LastUpdate).First();
<tr class="Content_table">
<td class="Content_Column">
<div class="Content_all">
<div class="History">@Html.DisplayFor(modelItem => History.Description)</div>
@if( Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Count() != null)
{
for (int a = 0; a < Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).Count(); a++)
{
var OtherIssues = Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).OrderBy(p => p.LastUpdate).ToList();
if(OtherIssues[a].Description != "noUpdate")
{
<div class="updated" style="position:relative" id="@i:@a:Description">
<b>@Html.DisplayFor(modelitem=> OtherIssues[a].User.FirstName) @Html.DisplayFor(modelitem=> OtherIssues[a].User.LastName)</b> <span style="color:grey;">-@Html.ValueFor(modelitem=> OtherIssues[a].LastUpdate, "{0:dd.MM.yy HH:mm}") </span> <br />
@Html.DisplayFor(modelItem => OtherIssues[a].Description, new { @class = "meeting" })
<span style="float:right; "><img src="~/Images/ic_cancel_black_18dp.png" id="Description:@i:@a:@Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)" onclick="markActiveLinkDelete(this);">
@Html.HiddenFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)].Description)
</span>
</div>
}
}
}
<div class="updated" >@Html.TextAreaFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace("Updated:","") == Model.OpenIssue[i].Id.ToString())].Description, new { @class = "meeting" })</div>
@Html.HiddenFor(modelItem=>modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace("Updated:","") == Model.OpenIssue[i].Id.ToString())].InternalNotes)
</div>
</td>
}
</table>
</div>
<p>
<input type="submit" value="Save" name = "Save"/>
<input type="submit" value="Cancel" name = "Cancel"/>
</p>
</fieldset>
}
@if( Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Count() != null)
{
for (int a = 0; a < Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).Count(); a++)
{
var OtherIssues = Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).OrderBy(p => p.LastUpdate).ToList();
if(OtherIssues[a].Description != "noUpdate")
{
//content
}
//This is new
@Html.HiddenFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)].Id)
}
}