asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net – ViewModel的列表是空的大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发我的第一个ASP.NET MVC 3应用程序,我有一个看起来像这样
@model IceCream.ViewModels.Note.NotesViewModel
@using (Html.beginForm())
{
    @Html.ValidationSumMary(true)
    @Html.TextBoxFor(m => m.Name)

    foreach (var item in Model.Notes)
    {
        @Html.EditorFor(m => item);
    }

    <input type="submit" value="Submit"/>
}

我有一个EditorTemplate,看起来像这样

@model IceCream.ViewModels.Note.NoteViewModel
<div>
    @Html.HiddenFor(m => m.NotEID)
    @Html.TextBoxFor(m => m.NoteText)
    @Html.checkBoxFor(m => m.Ischecked)
</div>

NotesViewModel如下所示:

public class NotesViewModel
    {
        public String Name { get; set; }
        public IEnumerable<NoteViewModel> Notes { get; set; }
    }

NoteViewModel如下所示:

public class NoteViewModel
{
    public int NotEID { get; set; }
    public System.datetiR_22_11845@e timestamp { get; set; }
    public String NoteText { get; set; }
    public bool Ischecked { get; set; }
}

当它被传递到视图时,NotesViewModel就会很好的被填充。但是,当单击提交按钮时,处理该帖子的控制器操作只具有viewmodel的Name属性的值。 Notes属性 – 用户已检查/取消选中的注释列表为空。当显示视图并发回ViewModel时,我们之间断开了这些TextBoxFor和checkBoxFor元素。对此的指导?


感谢Mystere Man,让我直截了当。据我所知,基本上通过改变我的循环

@ Html.EditorFor(m => m.Notes)

改变了底层的HTML,我明白了在这个帖子上提供了正确的模型绑定。看看生成的HTML,我看到我得到以下生成的注释之一:

<div>
  <input id="Notes_0__NotEID" type="hidden" value="1" name="Notes[0].NotEID">
  <input id="Notes_0__NoteText" type="text" value="Texture of dessert was good." name="Notes[0].NoteText">
  <input id="Notes_0__Ischecked" type="checkbox" value="true" name="Notes[0].Ischecked>
</div>

与我的原始代码生成的HTML不同:

<div>
   <input id="item_NotEID" type="hidden" value="1" name="item.NotEID>
   <input id="item_NoteText" type="text" value="Texture of dessert was good." name="item.NoteText" >
   <input id="item_Ischecked" type="checkbox" value="true" name="item.Ischecked">
</div>

通过循环通过Notes,生成的HTML基本上失去对viewmodel的Notes属性的任何引用,并且当HTML被正确填充时,复选框值的设置无法将它们的值传递给viewmodel,我猜这是点的模型绑定。

所以我学到了一些东西,这很好。

解决方法

你是一个聪明的人,所以看看你的看法。然后,虑如何生成HTML。然后,虑如何基于生成的HTML,模型绑定器应该知道的回发重新填充Notes。

我想你会发现你的HTML没有足够的信息,为模型工具找出它。

虑这个:

@EditorFor(m => Model.Notes)

而不是你基本上从EditorFor函数隐藏上下文的for循环。

大佬总结

以上是大佬教程为你收集整理的asp.net – ViewModel的列表是空的全部内容,希望文章能够帮你解决asp.net – ViewModel的列表是空的所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。