Asp.net mvc 3 MVC3&x2014;故障绑定复杂模型

Asp.net mvc 3 MVC3&x2014;故障绑定复杂模型,asp.net-mvc-3,asp.net-ajax,model-binding,asp.net-mvc-viewmodel,Asp.net Mvc 3,Asp.net Ajax,Model Binding,Asp.net Mvc Viewmodel,我需要用地址的IList更新公司类。这些是我的数据模型 // Entity class Company — managed by Nhibernate public class Company { public virtual IList<Address> _addresses { get; set; } public Company() { _addresses = new List<Address>(); } } // Entity cla

我需要用地址的IList更新公司类。这些是我的数据模型

// Entity class Company — managed by Nhibernate
public class Company
{
  public virtual IList<Address> _addresses { get; set; }

  public Company()
  {
    _addresses = new List<Address>();
  }
}

// Entity class Address — managed by Nhibernate
public class Address
{
  public virtual string line1 { get; set; }
  public virtual string line1 { get; set; }
}
//实体类公司-由Nhibernate管理
公营公司
{
公共虚拟IList_地址{get;set;}
上市公司()
{
_地址=新列表();
}
}
//实体类地址-由Nhibernate管理
公共课堂演讲
{
公共虚拟字符串line1{get;set;}
公共虚拟字符串line1{get;set;}
}
我在控制器的GET操作中将数据从实体类打包到Viewmodel,并在控制器的POST操作中将数据从Viewmodel解包回实体类

这是我的视图模型

// Class CompanyRequest
public class CompanyRequest
{
  public IList<AddressRequest> AddressRequests;
}

//Class AddressRequests
public class AddressRequest
{
  public string line1 { get; set; }
  public string line1 { get; set; }
}
//类公司请求
公共类公司请求
{
公共IList请求;
}
//类地址请求
公共类地址请求
{
公共字符串line1{get;set;}
公共字符串line1{get;set;}
}
我使用局部视图来显示每个地址框。对于AddressRequests中的每个AddressRequest,我将对象传递到前缀设置正确的局部视图

for(var i = 0 ; i < AddressRequests.Count() ; i++)
{
  ViewData["Prefeix"] = String.Format("AddressRequests[{0}]", i);
  Html.RenderPartial("_addressPartial", AddressRequests[i]);
}
for(var i=0;i
我需要能够添加“添加新地址””按钮,以便用户可以将新地址添加到此列表中。这必须在不刷新页面的情况下完成。当用户单击该按钮时,会出现另一个地址框(我猜是相同的部分)。然后用户编辑该框并按下“保存”按钮。这个保存按钮应该保存整个公司的数据,而不仅仅是地址


有办法做到这一点吗?非常感谢您的帮助

答案是您使用客户端技术,即在UI中动态加载其他地址,然后在数据准备好保存时通过将其传递回服务器端进行处理

有很多javascript库可以执行ajax请求。我更喜欢这个

以下是一些关于如何使用mvc执行ajax的文章:


当然:

真的很蹩脚,刚刚发现stackoverflow不允许你发布“让我用谷歌为你搜索”网站的链接。哦,好啊哈!找到了一个利用url compressor=P的解决方案,它就存在于此!我明白了。我所要做的就是使用AJAX链接异步点击控制器动作。我将很快发布我的全部代码,因为我认为在没有jQuery的情况下,您不会看到任何地方都可以这样做。@ChameeraDedduwage如果您觉得我的ajax答案有帮助并导致解决方案,请随意将其标记为答案=P