2012-03-15 66 views
0

嗨,有人能告诉我如何将PartialView加载到我已准备好位于_Layout.cshtml中的div容器中(它完全独立于链接本身) 。我想把它装到集装箱上的以下操作链接的点击:如何在_Layout.cshtml中将部分视图加载到容器中

<a href="@Url.Action("RenderColorbox", "ContactPartial", new { path = "_ContactPartial" })" class="colorboxLink"><span>ContactUs</span></a> 

我想这样做没有JavaScript的,因为我需要建立在我的控制器模型,并把它传递给PartialView,我不认为它可能将强类型模型传递给使用JavaScript的视图。

如果我想我可以使用:

$('.colorboxLink').click(function() { 
    $('.colorbox_container').load(this.href); 
}); 

,但正如我所说,这并没有给我创造并传递一个强类型的模型局部视图的机会......我可以其重要创建模型并将其传递给视图,因为当我在部分视图中尝试类似foreach(Model.ItemList中的var项)时,Im获取空引用异常。

我的继承人控制器是什么样子:

public virtual ActionResult RenderColorbox(string path) 
    { 
     return PartialView(path, null); 
    } 

然而,目前,点击跳转链接只是呈现一个新的空白页面,而不是我已经建立了容器内的PartialView。

谢谢大家的帮助。

编辑:要加载颜色框我用下面的建议:

$('.colorboxLink').click(function() { 
    $('.colorbox_container').load(this.href, function() { 
     var colorboxOptions = { 
      inline: true, 
      scrolling: false, 
      opacity: ".9", 
      fixed: true, 
      onLoad: function() { 
       $('#cboxContent').css({ 
        "background": "white" 
       }); 
       $('#cboxLoadedContent').css({ 
        "margin-bottom": "28px", 
        "height": "558px" 
       }); 
      } 
     } 
     $('#contactColorbox').colorbox(colorboxOptions); 


    }); 

但仍没有加载颜色框,而是作为一个弹出模式。

回答

0

但正如我所提到的,这并不能让我有机会创建并将 强类型模型传递给局部视图。

它给你这样的机会。您正在向ContactPartial控制器上的RenderColorbox操作发送AJAX请求。这里面的动作,你可以准备并发送你想局部任何复杂的视图模型:

public ActionResult RenderColorbox(string path) 
{ 
    SomeComplexModel model = ... 
    return PartialView(path, model); 
} 

另外,还要确保你通过返回从单击处理虚假取消链接的默认操作:

$(function() { 
    $('.colorboxLink').click(function() { 
     $('.colorbox_container').load(this.href); 
     return false; 
    }); 
}); 

如果你不这样做,当你点击链接时,你的AJAX调用几乎没有机会在浏览器重定向到目标页面之前执行。

+0

那么,如果我要使用javascript load()就像我上面显示的那么我会在actionlink上设置onclick =“false”,不是吗?因为否则它只是将局部视图加载到空白的新页面中。在这种情况下,如果onclick =“false”,RenderColorbox()不会被调用吗? – parliament 2012-03-15 07:38:12

+0

像魅力一样工作。非常感谢! – parliament 2012-03-15 07:45:10

+0

@ user1267778,为什么当你已经在你的javascript中订阅它时,为你的锚添加onclick属性?也正确的是'onclick =“return false;'',而不是'onclick =”false“'。但不要这样做。不要混合标记和JavaScript。 – 2012-03-15 07:46:18

相关问题