如何将信息从弹出窗口/模态窗口传递到ASP.NET MVC中的基本窗口

时间:2010-01-06 00:08:07

标签: javascript asp.net-mvc forms modal-dialog

我正在ASP.NET MVC中编写联系表单。用户将能够附加常规文件(使用普通文件/浏览功能)以及搜索特定人员并附加与该人员相关的文件的能力。第一部分很简单,但第二部分让我感到头痛。

对于第二部分,我将使用2-3页向导。将向用户显示搜索字段,键入用户名,点击搜索,并显示结果列表。单击一个名称后,会显示一个相关记录列表,这些记录可以检查一些或不检查。然后,用户将单击“附加”,文件将显示在联系表单中。

我担心如果我离开联系页面或绕过模态窗口中的控制器(模式窗口可以在页面之间导航?)或弹出窗口,我会以某种方式搞砸整个MVC架构

我不想乱搞AJAX调用,所以如何弹出一个窗口,运行这个快速的2-3页搜索向导,然后将内容写回基本窗口?它只是一个基本的JavaScript和HTML的问题,还是你认为这将涉及更多,或者AJAX是不可避免的?

2 个答案:

答案 0 :(得分:1)

通过jQuery渲染PartialViews是仅更新View的部分内容的有效方法。

如果没有进入jQuery以及如何使用它,那就让我们深入了解。

在View,PartialView或MasterPage中,链接到jQuery脚本文件。

<script src="../../Scripts/ jquery-1.3.2.min.js"></script>

首先,我们将创建一个jQuery函数将调用的ActionResult。它与任何其他ActionResult完全相同,只是它不会返回一个View,而是返回一个PartialView。

public ActionResult getFilteredData(string filter)
{
  //do something interesting with filter like
  //returning a list of items from a db

  //once we have our data we can return
  //a partial view giving to it the data as its model
  return PartialView("MyPartialView", returnedDataList);
}

对于ActionResult而言,这几乎就是它。

正如我希望你看到的那样,该方法只需要一个参数,将数据过滤到一个列表中,然后返回一个将数据列表作为其定义模型的PartialView。

Html看起来像这样;

<div id="myPartialView">
</div>

注意我已将div命名为与局部视图相同。这两者绝不相关我只是觉得它让事情变得简单易读。

现在是jQuery。

$.post("/MyController/getFilteredData", { filter: “dogs” },  
  function(newHTML) { 
document.getElementById("myPartialView").innerHTML = newHTML;
});

所以jQuery正在做的就是回复动作,传递一个“狗”的过滤器。 ActionResult的响应在newHTML中捕获,然后放在名为myPartialView的div中。

答案 1 :(得分:0)

为什么Ajax会出现这样的问题?如果您使用Ajax,那么您可以回发详细信息,使用完全呈现的PartialView返回并在页面上显示。

通过这种方式,您永远不会离开您的基页,一切都将与世界相得益彰,您可以将所有数据发回给您的基页控制器。

所以概括一下。向导中的每个步骤都可以是局部视图,当您逐步完成这些步骤时,可以在同一位置渲染局部视图。

另一种方法是,所有三个步骤都在基页上开始,您可以根据需要显示/隐藏tham。

也不要忘记REST原则。如果您希望向导成为单独的视图,那么每个视图都需要对自己负责。您当然可以使用id调用控制器,也可以通过完整模型。

通过这种方式,您的视图可以加载模型,渲染自身,更新模型属性并将模型传递到下一个视图。

只是一些想法。我猜你应该选择最好的口味。

我会选择我的最后一个选项。我认为将视图模型传递给每个控制器可以获得最佳结果。

我希望这会有所帮助。