Asp.net mvc 3 将Fancybox与ASP.NET MVC Ajax结合使用
我有一个在fancybox中加载的表单,因此如果用户单击链接,一个表单就会加载到fancybox中,它是一个@Ajax.BeginForm。像这样:Asp.net mvc 3 将Fancybox与ASP.NET MVC Ajax结合使用,asp.net-mvc-3,fancybox,Asp.net Mvc 3,Fancybox,我有一个在fancybox中加载的表单,因此如果用户单击链接,一个表单就会加载到fancybox中,它是一个@Ajax.BeginForm。像这样: @using (Ajax.BeginForm("AddToBasket", new { controller = "Orders" }, new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "SuccessBasket", O
@using (Ajax.BeginForm("AddToBasket", new { controller = "Orders" }, new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "SuccessBasket",
OnSuccess = "goToCheckout"
}, new { @class = "product-order-form" }))
{
@* Form elements for Model *@
<div id="SuccessBasket"></div>
}
我有一个名为ModalWindow的空div,它被一个div集合包装为display:none,按照说明:
<div style="display: none">
<div id="ModalWindow">
</div>
</div>
其中basket是我的模型BasketModel basket=新BasketModel
My _OrderProductPartialView是我文章开头包含Ajax表单的视图。其中有SuccessBasket div
到目前为止,它工作得非常好。表单加载到fancybox中
AddToBasket操作返回PartialView:
return PartialView("_OrderProduct", basket);
return PartialView("_BasketSuccess");
此视图仅告诉用户他们的项目已添加到购物篮中:
<p>This item has been added to your basket. Search again or goto @Html.ActionLink("checkout", "Order", new { controller = "Orders" }, new { @class = "checkout-link" }) to continue.</p>
问题是,SuccessBasket div没有用上面的文本更新,但是通过调试,我可以看到它确实加载了视图_BasketSuccess,它只是没有在模式窗口中更新。加载fancybox的方式很奇怪。您将发送两个AJAX请求:一个用于AJAX.ActionLink,另一个用于fancybox。所有这些都不是必需的。此外,在主视图中不需要隐藏div,fancybox会自动完成所有这些操作 总而言之,在主视图中,您只需要一个指向控制器actin的简单HTML链接,它将返回一个包含表单的部分:
@Html.ActionLink("Order", "OrderProduct", "Orders", null, new { @class = "lightbox" })
在一个单独的javascript文件中,您将fancybox附加到该锚定上,这样当它被单击时,它将自动发送一个AJAX请求fancybox,而不是您,获取部分表单并显示它:
$(function () {
$('.lightbox').fancybox();
});
好的,现在你有了一个fancybox中显示的部分形式。这个部分表单实际上是一个Ajax.BeginForm。因此,当您提交此表单时,它将向AddToBasket操作发送一个AJAX请求,一旦成功,它将使用此操作返回的结果更新表单中的内容。加载fancybox的方式很奇怪。您将发送两个AJAX请求:一个用于AJAX.ActionLink,另一个用于fancybox。所有这些都不是必需的。此外,在主视图中不需要隐藏div,fancybox会自动完成所有这些操作 总而言之,在主视图中,您只需要一个指向控制器actin的简单HTML链接,它将返回一个包含表单的部分:
@Html.ActionLink("Order", "OrderProduct", "Orders", null, new { @class = "lightbox" })
在一个单独的javascript文件中,您将fancybox附加到该锚定上,这样当它被单击时,它将自动发送一个AJAX请求fancybox,而不是您,获取部分表单并显示它:
$(function () {
$('.lightbox').fancybox();
});
好的,现在你有了一个fancybox中显示的部分形式。这个部分表单实际上是一个Ajax.BeginForm。因此,当您提交此表单时,它将向AddToBasket操作发送一个AJAX请求,一旦成功,它将使用此操作返回的结果更新表单中的内容。您能提供更多详细信息吗?这张表怎么装?你是怎么打开fancybox的?控制器操作的结果是什么?goToCheckout函数做什么?你能提供更多细节吗?这张表怎么装?你是怎么打开fancybox的?控制器操作的结果是什么?goToCheckout函数做什么?谢谢,这解决了我的问题,我用Html.ActionLink替换了我的OrderProduct链接的Ajax.ActionLink。这对我不起作用。它没有显示对话框,而是将对话框部分显示为页面:|谢谢,这解决了我的问题,我用Html.ActionLink替换了我的OrderProduct链接的Ajax.ActionLink。这对我不起作用。它不显示对话框,而是将对话框部分显示为页面:|