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

时间:2009-06-15 16:06:52

标签: javascript asp.net-mvc

对于措辞不好的问题,我们深表歉意。

我希望得到每个人关于处理这个问题的最佳方法的想法。

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

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

实现此目的的最佳方法是什么?目前,我唯一的想法是使用javascript将值/查询字符串附加到联系表单链接,表明已启用javascript。例如,http://www.mysite.com/contact/jshttp://www.mysite.com/contact/?js=enabled。如果启用了javascript,我可以部分呈现联系表单。

我欢迎所有的想法和链接。

谢谢!

2 个答案:

答案 0 :(得分:4)

在控制器中使用此功能:

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

return View("FullView");

FullView.aspx

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

答案 1 :(得分:3)

你确实可以用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>

请注意,“load”方法中的URL与您只想抓取的目标页面上的区域之间存在一个空格。您可以阅读有关此here的更多信息。这将从#myContactForm页面抓取contact.html div,并将其插入到母版页的#myModalPlaceHolder div中。

祝你好运!
-Mike