加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用ASP.Net MVC中的模型绑定器更新父/子记录

发布时间:2020-12-15 19:55:00 所属栏目:asp.Net 来源:网络整理
导读:我已经修改了 Nerd Dinner应用程序以允许通过将以下代码添加到DinnerForm.ascx来编辑子记录 p %int i = 0; foreach (NerdDinner.Models.RSVP rsvp in this.Model.Dinner.RSVPs) { % %= Html.Hidden("Dinner.RSVPs[" + i + "].RsvpID",rsvp.RsvpID)% %= Html.
我已经修改了 Nerd Dinner应用程序以允许通过将以下代码添加到DinnerForm.ascx来编辑子记录
<p>
    <%int i = 0;
   foreach (NerdDinner.Models.RSVP rsvp in this.Model.Dinner.RSVPs)
       { %>

        <%= Html.Hidden("Dinner.RSVPs[" + i + "].RsvpID",rsvp.RsvpID)%>
        <%= Html.Hidden("Dinner.RSVPs[" + i + "].DinnerID",rsvp.DinnerID)%>
        <%= Html.TextBox("Dinner.RSVPs[" + i + "].AttendeeName",rsvp.AttendeeName)%>
    <% i += 1;
   } %>
    </p>

它呈现这个:

<p>
    <input id="Dinner_RSVPs[0]_RsvpID" name="Dinner.RSVPs[0].RsvpID" type="hidden" value="36" />
        <input id="Dinner_RSVPs[0]_DinnerID" name="Dinner.RSVPs[0].DinnerID" type="hidden" value="63" />
        <input id="Dinner_RSVPs[0]_AttendeeName" name="Dinner.RSVPs[0].AttendeeName" type="text" value="kp" />
    <input id="Dinner_RSVPs[1]_RsvpID" name="Dinner.RSVPs[1].RsvpID" type="hidden" value="37" />
        <input id="Dinner_RSVPs[1]_DinnerID" name="Dinner.RSVPs[1].DinnerID" type="hidden" value="63" />
        <input id="Dinner_RSVPs[1]_AttendeeName" name="Dinner.RSVPs[1].AttendeeName" type="text" value="jim" />

    </p>

我没有修改DinnersControler的Post Edit Action方法.父母的晚餐照常更新,但它似乎是UpdateModel(晚餐);没有看到/更新子RSVP记录.

我已经尝试了一些渲染子记录的变体,以便模型绑定器可以看到集合,没有运气.

通过调用UpdateModel(Parent)一次更新父/子记录;可能与当前的模型粘合剂?

解决方法

我自己无法做到这一点.

我知道您可以自动更新单个子元素,即Dinner.RSV.我从未见过更新子枚举的能力,这需要绑定才能知道哪个属性是ID并查找它(即Dinner.RSVP.Where(r => r.RSVP_ID == input_id)和然后更新那个).我不太了解自定义绑定做类似的事情.

但是,我所做的是做一个循环并指定rsvp和int作为前缀:

所以你也是:

UpdateModel("Dinner",Dinner);

更新父级然后:

int i = 0;

foreach (var r in Dinner.RSVPs) {
  UpdateModel(r,"Dinner.RSVPs[" + i++ + "]");
}

不太干净,但对我来说效果很好.但是,构建验证可能需要更多的努力(您希望同时验证所有内容,并确保不会在第一个RSVP上跳回到视图时出现错误).

编辑:修复了代码以反映OP的解决方案,包括我的参数顺序中的错误.话虽如此,我使用RSVP.ID属性比运行整数更舒服.只要您知道Dinner.RSVP在POST上与GET相同(我在我的代码中对此有信心),那么使用RSVP.ID将起作用.如果RSVP与RSVP不同,那么只有那两个存在的RSVP才会更新.但是,使用sequential int可能会导致更新错误的对象.

希望有所帮助,詹姆士

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读