Asp.net mvc 表单字段的ASP.NET MVC查找

Asp.net mvc 表单字段的ASP.NET MVC查找,asp.net-mvc,forms,asp.net-mvc-4,Asp.net Mvc,Forms,Asp.net Mvc 4,我们有一个基于ASP.NET MVC的业务表单,需要填写多个文本框(例如,一个用例是“Register person”->表单包含:姓名、父亲、母亲等) 数据录入员不应被迫自己输入父亲/母亲,他应能够在系统中搜索此人。仅仅有一些自动完成字段或弹出窗口是不够的,他应该能够利用我们已经实现的完整搜索页面(Person controller有SearchIndex和SearchPerson操作,用户有各种搜索选项) 最终的UI应该是这样的:Register person表单有一个按钮“Select f

我们有一个基于ASP.NET MVC的业务表单,需要填写多个文本框(例如,一个用例是“Register person”->表单包含:姓名、父亲、母亲等)

数据录入员不应被迫自己输入父亲/母亲,他应能够在系统中搜索此人。仅仅有一些自动完成字段或弹出窗口是不够的,他应该能够利用我们已经实现的完整搜索页面(Person controller有SearchIndex和SearchPerson操作,用户有各种搜索选项)

最终的UI应该是这样的:Register person表单有一个按钮“Select father”,它将UI切换到搜索页面,用户搜索此人,并能够在结果表中的一行上单击“Select”,从而将UI返回到Register person表单,父数据现在填充到只读字段中(隐藏的ID、姓名和出生日期可见,但不可编辑)

我们的问题:推荐的解决方法是什么

a) 打开搜索表单时是否将已输入的数据保存在原始表单中?是否真的有必要在jquery对话框中打开搜索表单,其中包含一个IFRAME,以保持在同一页面上,并且不丢失输入的数据

b) 如何将所选ID返回到原始表单并预填充只读文本框


我希望您知道我们正在努力实现的目标,否则请发表评论,我将澄清问题。

我看到两种选择:

  • 您可以利用客户端技术。您可以打开一个模式或使用搜索人员操作结果填充一个div。一旦用户找到父亲,您就可以将该数据移动到相应的容器(只读文本字段)并关闭搜索容器
  • 您可以在服务器端执行所有操作。您可以始终使用会话来存储用户已经键入的数据,将用户带到搜索视图,一旦用户选择了父亲,您就可以使用父亲数据填充会话中存储的信息。初始表单可以查看会话变量/对象以填充输入字段(如果可用)
注释

  • 您始终可以根据需要组合客户端/服务器端技术

  • 您可以按照建议使用该会话,但任何其他瞬态数据存储机制都可以完成这项工作(键值存储:Redis?document db等)


我将实现一些新功能,并使用Jquery UI对话框进行搜索和选择。您可以/应该重构现有的搜索系统,以支持不同的用户界面,或者只编写一个新的用户界面。

我个人认为,使用jQuery对话框或iframe将搜索页面嵌套在表单上比导航到搜索页面并返回所选页面更令人愉快,并提供更好的用户体验记录。我认为实施起来也比较容易。这是局部视图的一个很好的用例。但是,有必要使用IFRAME吗?在这里使用IFRAME有什么缺点吗?有些人建议永远不要使用iframe…我个人没有使用iframe,因此无法评论它们的优点,但我使用了jQuery UI对话框插件,它非常优秀。如果可能,由于性能/可伸缩性问题,我们不希望使用会话。如果我们使用模式对话框选项,用户按下搜索按钮,整个页面不会被重新加载,而不仅仅是模式对话框吗?如果您使用ajax,ASP.MVC(ajax.BeginForm)中内置了对ajax调用的支持,或者您可以在普通的jquery中执行此操作。如果页面中已经有标记,则不必重新加载,只是藏起来了。或者,您可以使用ajax拉入用于搜索的标记。就我个人而言,我也不使用session,而是使用Redis来存储这种类型的数据。根据应用程序的大小和性质,使用会话可能不会有问题。有两种方法可以使表单上的搜索视图可用。您可以加载视图并将其隐藏,直到用户单击“查找父亲”并使其可见。或者可以使用.load(url)使用ajax加载视图。如果用户总是要选择一个父亲,第一种方法是可以的,如果不是,第二种方法可以避免您在不需要的情况下加载所有html。