2011-03-17 70 views
1

不知道如何字这个正确.. 所以我有其中有一个强类型的视图模型作为视图:partialview模型更新父视图

class MyViewModel 
{ 
    public string MyName get; set; 
    public string DateOfBirth get; set; 
    public Address MyAddress get; set; 
} 

class Address 
{ 
    public string Street get; set; 
    etc... 
} 

我加载与MyViewModel的inital视图,并使用下面显示一个部分视图来加载地址(这样地址输入可以被重用)。

视图包含在用户名列表的下拉列表,在下拉菜单中选择一个值向下调用AJAX .change函数执行以下操作:

$.get('/User/DisplayAddress/', {'selection': selection }, function (html) { 

$('#addressBlock').html(html); 

}); 

所有作品great..and HTML被加载..但是,视图模型和地址现在已断开连接。所以当我提交我的页面时,ViewModel中的MyAddress现在包含一个空值。

我应该如何在mvc2/ajax中正确地做到这一点?

另一种方法我用了使用'<% RenderPartial("viewname", Model.MyAddress); %> 其工作,但我还是要以JSON返回数据,并在Java函数的值手动添加到域 - 这个效果很好..但它很凌乱时MyAddress字段我包含几个字段,硬编码添加到输入字段的值看起来很可怕。

回答

1

问题是从部分插入HTML时,绑定被搞砸了。 我的分部视图没有遵循相同的命名空间,所以输入字段失去了对父视图模型的绑定。

即我的文本框现在拥有的命名约定MyViewModel.Address.Street等

我使用jQuery的方法来替换HTML中的DIV容器。问题在于绑定在显示html时被搞砸了。

我设置了文本框的“名称”元素,使其与inputmodel相同,并在插入部分时保持了绑定。

理想情况下,我会使用'平面'viewmodel而不是'继承'的方法,但我无法在这种情况下。