Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 视图模型的某些项在视图和控制器之间丢失_Asp.net Mvc 4_Post_View_Controller - Fatal编程技术网

Asp.net mvc 4 视图模型的某些项在视图和控制器之间丢失

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 视

问题是,我的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;imodeleItem.OpenIssue[i].Id); //更多隐藏的领域 Model.allissueexceptoriginal.Capacity=Model.allissueexceptoriginal.Count; var History=Model.OpenIssue[i].Histories.Where(p=>p.IssueId==Model.OpenIssue[i].Id).OrderByDescending(a=>a.LastUpdate.First(); @DisplayFor(modelItem=>History.Description) @if(Model.allissueexceptoriginal.Where(p=>p.InternalNotes.Replace(“更新:”)==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.DisplayFor(modelitem=>OtherIssues[a].User.FirstName)@Html.DisplayFor(modelitem=>OtherIssues[a].User.LastName)-@Html.ValueFor(modelitem=>OtherIssues[a].LastUpdate,“{0:dd.MM.yy HH:MM}”)
@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)
           }
}