在asp.net MVC中渲染部分视图(模态窗口)

在asp.net MVC中渲染部分视图(模态窗口)

问题描述:

抱歉措辞不佳。在asp.net MVC中渲染部分视图(模态窗口)

我一直希望得到每个人的想法,以最好的方式来处理这个问题。

我在链接到联系表单的母版页上有一个链接。如果用户启用了JavaScript,我想用jQuery打开表单模式窗口。如果没有,用户将被引导至联系表单页面。

问题是,当提供模式窗口时,我只想显示联系表单 - 减去周围的模板/主页面。但是,在禁用JavaScript的情况下,联系表单页面应与模板/主页面一起显示。

实现此目的的最佳方式是什么?目前,我唯一的想法是使用javascript将值/ querystring附加到联系表单链接,指示启用了javascript。例如,http://www.mysite.com/contact/jshttp://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

+1

这正是我需要的,迈克! jQuery永远不会让我印象深刻 - 我不知道你可以在加载函数中使用类似jQuery的选择器。谢谢你非常透彻的回答。 – adamisnt 2009-06-16 16:53:27

使用这个在你的控制器来代替:

if (Request.IsAjaxRequest()) 
{ 
    return PartialView("PartialViewWithYourForm"); 
} 

return View("FullView"); 

FullView.aspx

... 
<%= Html.RenderPartial("PartialViewWithYourForm") %> 
... 
+0

谢谢你的回复,eu-ge-ne。 我曾想过这件事。不过,我相信jQuery Modal Window插件(fancybox)正在对联系人表单页面进行常规(非Ajax)调用 - 因此Request.IsAjaxRequest将评估为false。 注:我只是测试,以确保它确实评估为false。是否有容易将请求变成ajax请求?还是有另一种方法来做到这一点? 谢谢你的帮助, 亚当 – adamisnt 2009-06-15 16:41:25