Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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
C# ASP NET MVC 4集合在post上为空_C#_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

C# ASP NET MVC 4集合在post上为空

C# ASP NET MVC 4集合在post上为空,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我读了谷歌的大部分内容:-,但我无法继续。无论我做什么,我的对象上的集合都是空的,并且在post上保持为空 我的模型: public class ArticleViewModel { public Guid EventId { get; set; } public IList<ArticleItemViewModel> ArtikelListe { get; set; } public decimal GesamtpreisNetto { get; set;

我读了谷歌的大部分内容:-,但我无法继续。无论我做什么,我的对象上的集合都是空的,并且在post上保持为空

我的模型:

public class ArticleViewModel
{
    public Guid EventId { get; set; }
    public IList<ArticleItemViewModel> ArtikelListe { get; set; }

    public decimal GesamtpreisNetto { get; set; }
    public decimal MwSt { get; set; }
}
我的看法是:

@using (Html.BeginForm("Next", "Article", FormMethod.Post))
{
@Html.HiddenFor(x => x.EventId)

<input type="hidden" name="ArtikelListe" />

for (var i = 0; i < Model.ArtikelListe.Count; i++)
//  foreach (EventManager.ViewModels.ArticleItemViewModel artikelItem in Model.ArtikelListe)
{               
    <div>
        <div>
            @if (Model.ArtikelListe[i].IstKategorie)
            {
                @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
                @Html.LabelFor(x => x.ArtikelListe[i].Information)
            }
            else
            {
                if (Model.ArtikelListe[i].MitAnzahl)
                {
                    @Html.TextBoxFor(x => x.ArtikelListe[i].Anzahl, new { @class = "field text fn" })
                }
                else
                {
                    @Html.LabelFor(x => x.ArtikelListe[i].Anzahl)                     
                }

                @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
                @Html.LabelFor(x => x.ArtikelListe[i].Information)
            }        
        </div>
    </div>
}
我想知道为什么http post上只发送部分数据,为什么我的所有列表项都为空。我试着为每一个人做一次渲染。同样的结果


有什么想法吗?我很无助。

这一行的问题是:

<input type="hidden" name="ArtikelListe" />
然后ArtikelListe覆盖列表的值,这就是它始终为空的原因。 因此,您只需要将隐藏字段重命名为其他名称,以避免与现有名称冲突

下面是一个基于DotNetFiddle中MVC代码的工作示例-


您可以单击“运行”,然后在右下框的两个输入字段中输入一些值,然后单击“保存”按钮。然后,它会将服务器在POST中收到的模型显示为JSON文本。

集合索引器必须从零开始,并且必须连续,除非您包含索引属性。由于您的if语句,您不必为属性Anzahl生成控件。查看标题信息,您没有ArtikelListe[0].Anzahl的值,这意味着第一个项目必须具有IstKategorie=true或MitAnzahl=false。您可以通过添加一个隐藏的输入来更正此问题,以便返回一个值

@if (Model.ArtikelListe[i].IstKategorie)
{
  @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
  @Html.LabelFor(x => x.ArtikelListe[i].Information)
  @Html.HiddenFor(x => x.ArtikelListe[i].Anzahl) // add this
}
else
{
  if (Model.ArtikelListe[i].MitAnzahl)
  {
    @Html.TextBoxFor(x => x.ArtikelListe[i].Anzahl, new { @class = "field text fn" })
  }
  else
  {
    @Html.LabelFor(x => x.ArtikelListe[i].Anzahl)
    @Html.HiddenFor(x => x.ArtikelListe[i].Anzahl) // add this         
  }
  @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
  @Html.LabelFor(x => x.ArtikelListe[i].Information)
}
使用第一个选项,它将发回所有项目。在第二种情况下,它将只回发满足if条件的项目

请注意,正如Sergey所说,您还需要删除

谢谢大家

问题是,我用小提琴上的脚本做了测试。在此代码中

Model.ArtikelListe[i].MitAnzahl
这一直都是真的

如果不正确,则值Anzahl未绑定到包含值的控件,而只是一个标签

@Html.LabelFor(x => x.ArtikelListe[i].Anzahl)
当我在该范围内插入一个隐藏字段并将Anzahl值绑定到它时,post返回了我所期望的所有数据


无论如何,谢谢你。我学到了很多

谢谢大家!如果我删除,则整个集合在post上为空。我现在将检查您的代码。如果我删除或重命名隐藏的字段名。这就是我想说的:-你的代码运行良好。但我的代码中仍然有一个空集合。你还改变了什么?我就是不能得到它…检查我指定的DotNetFiddle链接。它在那个里工作,Anzahl参数对服务器端来说很好,集合有两个和UI上相同的项。也许你有不同的代码影响它?哇。我给你一个详细正确的答案,而不是接受它,你张贴这个。甚至连赞成票都没有。祝你以后能得到任何帮助。斯蒂芬,对不起我的错。很久没有了,所以我不知道我是否错过了你的答案,或者只是不知道更好的答案。下次请在拍摄前询问。谢谢
@if (Model.ArtikelListe[i].IstKategorie)
{
  @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
  @Html.LabelFor(x => x.ArtikelListe[i].Information)
  @Html.HiddenFor(x => x.ArtikelListe[i].Anzahl) // add this
}
else
{
  if (Model.ArtikelListe[i].MitAnzahl)
  {
    @Html.TextBoxFor(x => x.ArtikelListe[i].Anzahl, new { @class = "field text fn" })
  }
  else
  {
    @Html.LabelFor(x => x.ArtikelListe[i].Anzahl)
    @Html.HiddenFor(x => x.ArtikelListe[i].Anzahl) // add this         
  }
  @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
  @Html.LabelFor(x => x.ArtikelListe[i].Information)
}
@if (Model.ArtikelListe[i].IstKategorie)
{
  @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
  @Html.LabelFor(x => x.ArtikelListe[i].Information)
}
else
{
  if (Model.ArtikelListe[i].MitAnzahl)
  {
    @Html.TextBoxFor(x => x.ArtikelListe[i].Anzahl, new { @class = "field text fn" })
    <input type="hidden" name="x.ArtikelListe.Index" value="@i" /> // add this manually
  }
  else
  {
    @Html.LabelFor(x => x.ArtikelListe[i].Anzahl)     
  }
  @Html.LabelFor(x => x.ArtikelListe[i].Artikelname)<br />  
  @Html.LabelFor(x => x.ArtikelListe[i].Information)
}
Model.ArtikelListe[i].MitAnzahl
@Html.LabelFor(x => x.ArtikelListe[i].Anzahl)