不确定如何正确说出这个... 所以我的视图有一个强类型的视图模型:
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加载初始视图,并使用以下内容显示部分视图以加载地址(这样可以重复使用地址输入)。
该视图包含一个下拉列表,其中包含用户名列表,在下拉列表中选择一个值,调用ajax .change函数,该函数执行以下操作:
$.get('/User/DisplayAddress/', {'selection': selection }, function (html) {
$('#addressBlock').html(html);
});
一切都很好..并且加载了html ..但是,视图模型和地址现在已断开连接。因此,当我提交我的页面时,ViewModel中的MyAddress现在包含空值。
我应该如何在mvc2 / ajax中正确执行此操作?
我使用的另一种方法是使用'<% RenderPartial("viewname", Model.MyAddress); %>
哪个有效,但我仍然需要在json中返回数据并在java函数中手动将值添加到字段中 - 这很有效..但是当MyAddress字段my包含多个字段并且硬编码将值添加到输入时它非常混乱田野看起来很可怕。
答案 0 :(得分:1)
问题是从部分插入HTML时绑定被搞砸了。 我的部分视图没有遵循相同的命名空间,因此输入字段丢失了与父视图模型的绑定。
即。我的文本框现在有命名约定MyViewModel.Address.Street等。
我使用jquery方法用HTML替换div容器。问题是在显示html时绑定被搞砸了。
我设置文本框的'name'元素以与inputmodel一样使用,并在插入部分时保留绑定。
理想情况下,我会使用“平面”视图模型而不是这种“继承”方法,但在这种情况下我无法使用。