【问题标题】:MVC3—Trouble binding complex modelMVC3—麻烦绑定复杂模型
【发布时间】:2013-04-03 05:42:13
【问题描述】:

我需要使用 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; }
}

我在控制器的 GET 操作中将数据从 Entity 类打包到 Viewmodel,并在控制器的 POST 操作中将数据从 Viewmodel 解包回 Entity 类。

这是我的视图模型。

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

//Class AddressRequests
public class AddressRequest
{
  public string line1 { get; set; }
  public string 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]);
}

我需要能够添加“添加新地址”按钮,以便用户可以将新地址添加到此列表中。这必须在不刷新页面的情况下完成。当用户单击该按钮时,会出现另一个地址框(我猜是相同的部分)。然后用户编辑该框并按下“保存”按钮。这个保存按钮应该保存整个公司数据,而不仅仅是地址

有没有办法做到这一点?非常感谢任何帮助!

【问题讨论】:

    标签: asp.net-mvc-3 asp.net-ajax model-binding asp.net-mvc-viewmodel


    【解决方案1】:

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

    有很多可以执行 ajax 请求的 javascript 库。我更喜欢jQuery library

    这里有一些关于如何使用 mvc 执行 ajax 的文章:

    当然还有:http://bit.ly/XWYE5P

    【讨论】:

    • 真的很蹩脚,刚刚发现 stackoverflow 不允许您发布指向 Let Me Google That For You 网站的链接。哦,好吧
    • 啊哈!找到了一种利用 url 压缩器的解决方法 =P 它继续存在! bit.ly/XWYE5P
    • 想通了。我所要做的就是使用 AJAX 链接来异步触发控制器操作。很快就会发布我的整个代码,因为我认为不是在任何地方都可以看到这样做没有 jQuery。
    • @ChameeraDedduwage 如果您觉得我的 ajax 回答很有帮助并导致解决方案,请随时将其标记为答案。 =P
    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多