我该如何设计这个页面?

请看这张照片:

在此处输入图像描述

我之间有一对多的关系。 人和地址。 这里的问题是它是一个“添加”forms,所以即使主记录也不在数据库中。 我该如何设计这个UI和实现? 如果此人在弹出窗口中单击“保存地址”,该怎么办? 我应该将该特定地址与哪个人联系起来? 在Asp.Net中我会将它存储在ViewState中,所以这个问题不会出现。 但是我如何做这个Asp.Net MVC 3.0? 我应该将它存储在Session中,然后当在主窗体上单击“save”时,我会从会话中检索所有地址并保存它。 这看起来是一种非常强硬的方法,因为如果这个人在两个标签中打开相同的表单怎么办? 我应该继续在子表单上创建隐藏字段并以CSV格式存储吗? 这有效,但会产生一个无用的JavaScript代码。

我希望我的问题清楚。 如果没有,请告诉我。 你如何在Asp.Net MVC中处理这个问题?

谢谢。

当用户在弹出窗口中单击“保存地址”时,使用一些javascript将条目添加到基础主页面,包括文本和包含数据的一组隐藏字段。 当表单最终回发时,这些隐藏的输入可以转换为主记录的相关数据。

完成后它会看起来像这样。

123 Street, Foo City, Idaho, 22222-2222 Delete
...

请注意,这假设您的视图模型在Address类中具有名为Addresses且具有相应属性的List

。 请注意,索引需要是连续的。 您可以使用一些javascript在表单提交时更新这些。

  $('form').submit( function() { $('.address-start').each( function(idx) { var prefix = 'Addresses[' + idx + '].'; $(this).attr('name',prefix + 'Street') .next(':hidden') .attr('name',prefix + 'City' ) .next(':hidden') .attr('name',prefix + 'State' ) .next(':hidden') .attr('name',prefix + 'Zip' ); }); return true; }); 

另请注意,如果在编辑和使用类似的东西时执行此类操作,则可能需要将“ Deleted属性添加到“ Address类,并仅隐藏要删除的地址,同时将相应的“ Deleted输入设置为值True以便您知道它应该在post上删除。 我已经在这里展示了它没有索引,因为创建它们将按它们发生的顺序绑定。 在编辑时,如果添加一个,则可能需要为新元素计算正确的索引。