背景
我的ASP.NET MVC Web应用程序上有一个页面,供用户在地址簿中输入地址。当用户输入他们的地址并单击提交按钮时,处理表单帖子的控制器操作会对地址进行地理编码(检索纬度,经度和完整地址,以防用户忘记输入其状态,邮政编码等)。
现在,完全有可能用户没有输入足够的信息来获得完全匹配。在这种情况下,地理编码服务返回指定地址的最佳匹配列表。发生这种情况时,我想提示用户使用这个最佳匹配列表,以便他们可以选择他们希望使用的地址。
这一切都非常有效。我在ViewData中存储了最佳匹配列表,如果提供了这些项目,页面会将列表中的项目呈现为无序列表。每个地址旁边是一个“选择”链接,用户可以使用该链接选择他们希望使用的地址。使用jQuery将“选择”链接的“单击”事件连接起来,将原始地址文本框中的文本替换为用户选择的地址,然后通过javascript单击“提交”按钮。
问题
当用户选择一个地址时,我希望我的控制器操作检查该地址是否已经在他们的地址簿中。如果是,那么我想返回一条错误消息,指出该地址已经存在。我还想重新呈现用户可以选择的可能地址列表(例如,如果用户最初看到一个可以从中选择的3个地址的列表,并且他们选择了已经在他们的地址簿中的地址,则页面应该显示错误消息和3个地址再次选择)。如何在我的控制器操作中不再调用地理编码服务的情况下重新呈现最佳匹配列表?
换句话说,我有一个无序列表,它是由我想要再次显示给用户的最后一个控制器操作生成的。列表中的项目呈现为文本字符串,因此不会发布到我的控制器操作。到目前为止,我能够解决这个问题的唯一方法是在会话中存储地址匹配列表。我错过了什么或是我应该采取的方式吗?
使用ASP.NET Web窗体应用程序,我可以简单地在ViewState中存储最佳匹配,并且在用户选择地址的回发中可以使用它。 ASP.NET MVC是否有类似的机制?
答案 0 :(得分:2)
您可以向控制器使用AJAX请求,该请求将验证该地址是否已存在,以及它是否仅更新页面的错误消息容器。这样,已经呈现的匹配列表将保持不变。
答案 1 :(得分:1)
为什么不在显示用户地址簿中的所有选项之前过滤现有地址?这样,用户将无法选择已存在的地址,因为它永远不会将其视为选项。
答案 2 :(得分:0)
将地址存储在带有ID的表中。存储用户列表中的ID。现在可以通过检查用户列表中是否存在ID来轻松过滤列表。