asp.net-mvc – 同一页面上的ASP.NET MVC模型绑定相关实体
发布时间:2020-12-16 03:18:30 所属栏目:asp.Net 来源:网络整理
导读:这个问题让我疯了好几个小时了…… 在我的域中,我有2个与Sku和Item相关的实体.每个sku可以有很多项目. public class Sku{ private readonly EntitySetItem items; public Sku() { items = new EntitySetItem(AttachItems,DetachItems); } public int SkuId {
这个问题让我疯了好几个小时了……
在我的域中,我有2个与Sku和Item相关的实体.每个sku可以有很多项目. public class Sku { private readonly EntitySet<Item> items; public Sku() { items = new EntitySet<Item>(AttachItems,DetachItems); } public int SkuId { get; set; } public string LongDescription { get; set; } public EntitySet<Item> Items { get { return items; } set{ items.Assign(value);} } private void AttachItems(Item entity) { entity.Sku = this; } private static void DetachItems(Item entity) { entity.Sku = null; } } public class Item { public Sku Sku { get; set; } public int ItemId { get; set; } public string Category { get; set; } public string Description { get; set; } } 我正在构建一个页面,允许最终用户同时更新sku上的某些字段和每个项目的某些字段. <% using (Html.BeginForm("Save","Merchant",FormMethod.Post,new { enctype = "multipart/form-data" })) { %> <fieldset> <legend>Sku</legend> <p><label for="SkuId">SkuId:</label> <%= Html.TextBox("SkuId",Model.SkuId,new{@readonly="readonly",onfocus="this.blur();"}) %></p> <p><label for="LongDescription">LongDescription:</label> <%= Html.TextBox("LongDescription",Model.LongDescription) %></p> </fieldset> <% for (int i = 0; i < Model.Items.Count; i++) { %> <fieldset> <legend>Item</legend> <p><label for="ItemId">ItemId:</label> <%= Html.TextBox(string.Format("items[{0}].{1}",i,"ItemId"),Model.Items[i].ItemId,new { @readonly = "readonly",onfocus = "this.blur();" })%></p> <p><label for="Category">Category:</label> <%= Html.TextBox(string.Format("items[{0}].{1}","Category"),Model.Items[i].Category)%></p> <p><label for="Description">Description:</label> <%= Html.TextBox(string.Format("items[{0}].{1}","Description"),Model.Items[i].Description)%></p> </fieldset> <%} // for-loop %> <p><input type="submit" value="Save" /></p> <%} // form %> 我有一些控制器代码,通过接受项目的Sku和EntitySet,然后将项目分配给Sku. [AcceptVerbs(HttpVerbs.Post)] public ActionResult Save(Sku sku,EntitySet<Item> items) { if (sku != null) { if (items != null) { sku.Items.Assign(items); } } // save Sku to repository ... // return Details view ... } 这是有效的,但是我注意到除了Sku的一次旅行之外,它还为每个项目通过DefaultModelBinder进行了两次旅行.绑定Sku时,将调用Items的setter,并且binder甚至会使用正确的值传递水合Items集合.但是,在调用items.Assign之后,Items.Count为0.这就是我必须重新分配控制器代码中的项目的原因.我期待通过活页夹将项目转移到Items集合.这应该消除每个项目的额外行程,因为我的控制器方法上的items参数可以被删除.为什么这不起作用? 解决方法
您可能需要为此创建自定义模型绑定器?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- asp.net C# config 自定义节点及自定义节点配置以
- asp.net-web-api – 使用Owin时无法获取ASP.NET
- asp.net-mvc-3 – 什么冒号(:)意味着在c#中定义
- asp.net – log4net在应用程序关闭之前不会写入日
- asp.net-mvc – 在ASP.NET MVC6中访问querystrin
- 现在启动ASP.NET 5 Web项目还为时过早吗?
- asp.net-mvc – 在ASP.NET MVC中,response.redir
- 二、Asp.Net Core WebAPI——OcelotDemo
- asp.net c#的论坛软件,我可以整合到我的asp.net项
- asp.net-mvc – ASP.Net MVC捆绑和分类
热点阅读