我正在ASP.NET MVC中编写联系表单。用户将能够附加常规文件(使用普通文件/浏览功能)以及搜索特定人员并附加与该人员相关的文件的能力。第一部分很简单,但第二部分让我感到头痛。
对于第二部分,我将使用2-3页向导。将向用户显示搜索字段,键入用户名,点击搜索,并显示结果列表。单击一个名称后,会显示一个相关记录列表,这些记录可以检查一些或不检查。然后,用户将单击“附加”,文件将显示在联系表单中。
我担心如果我离开联系页面或绕过模态窗口中的控制器(模式窗口可以在页面之间导航?)或弹出窗口,我会以某种方式搞砸整个MVC架构
我不想乱搞AJAX调用,所以如何弹出一个窗口,运行这个快速的2-3页搜索向导,然后将内容写回基本窗口?它只是一个基本的JavaScript和HTML的问题,还是你认为这将涉及更多,或者AJAX是不可避免的?
答案 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调用控制器,也可以通过完整模型。
通过这种方式,您的视图可以加载模型,渲染自身,更新模型属性并将模型传递到下一个视图。
只是一些想法。我猜你应该选择最好的口味。
我会选择我的最后一个选项。我认为将视图模型传递给每个控制器可以获得最佳结果。
我希望这会有所帮助。