在asp.net MVC中渲染部分视图(模态窗口)
抱歉措辞不佳。在asp.net MVC中渲染部分视图(模态窗口)
我一直希望得到每个人的想法,以最好的方式来处理这个问题。
我在链接到联系表单的母版页上有一个链接。如果用户启用了JavaScript,我想用jQuery打开表单模式窗口。如果没有,用户将被引导至联系表单页面。
问题是,当提供模式窗口时,我只想显示联系表单 - 减去周围的模板/主页面。但是,在禁用JavaScript的情况下,联系表单页面应与模板/主页面一起显示。
实现此目的的最佳方式是什么?目前,我唯一的想法是使用javascript将值/ querystring附加到联系表单链接,指示启用了javascript。例如,http://www.mysite.com/contact/js或http://www.mysite.com/contact/?js=enabled。如果启用javascript,我可以部分呈现联系人表单。
我欢迎所有想法和链接。
谢谢!
你的确可以使用jQuery做这个很好!
假设您的联系方式页面上的联系表格包含在id="myContactForm"
的div中。您可以将选择器(例如,'#myContactForm'
)与要加载内容的URL组合在一起。您可以通过多种不同的方式将表单(或任何其他内容)直接加载到当前页面中。我个人更喜欢jqModal来满足我的模式窗口需求,但如果您使用其他任何东西,您可以使用jQuery.load方法本身。
所以,如果你的第一页被命名为“master.html”和您的联系方式被命名为“contact.html”,这里就是你可以“master.html”里面做什么:
<div id="someDiv">
Please <a id="contactLink" href="contact.html">contact us</a> with
any questions!
</div>
<div id="myModalPlaceholder">
Modal content would go in here; this div is initially hidden.
</div>
这如果没有javascript,当然会链接到联系表单。但是,您只想提取“contact.html”的一部分并将其显示在您的母版页上。这里是你如何完成你的master.html页面上你的目标的想法:
<script type="text/javascript">
$(document).ready(function() {
$('#contactLink').click(function() {
$('#myModalPlaceholder').load('contact.html #myContactForm');
return false; // cancel the native click event
});
});
</script>
你注意到在“加载”方法从区域只想抢在目标页面上分离的URL空间。你可以阅读更多关于这个here。这将从contact.html
页抓取#myContactForm
div,并将其插入您的母版页#myModalPlaceHolder
div。
祝你好运!
-Mike
使用这个在你的控制器来代替:
if (Request.IsAjaxRequest())
{
return PartialView("PartialViewWithYourForm");
}
return View("FullView");
FullView.aspx
...
<%= Html.RenderPartial("PartialViewWithYourForm") %>
...
谢谢你的回复,eu-ge-ne。 我曾想过这件事。不过,我相信jQuery Modal Window插件(fancybox)正在对联系人表单页面进行常规(非Ajax)调用 - 因此Request.IsAjaxRequest将评估为false。 注:我只是测试,以确保它确实评估为false。是否有容易将请求变成ajax请求?还是有另一种方法来做到这一点? 谢谢你的帮助, 亚当 – adamisnt 2009-06-15 16:41:25
这正是我需要的,迈克! jQuery永远不会让我印象深刻 - 我不知道你可以在加载函数中使用类似jQuery的选择器。谢谢你非常透彻的回答。 – adamisnt 2009-06-16 16:53:27