如何在视图中加载局部视图

pat*_*anb 70 asp.net-mvc asp.net-mvc-partialview razor asp.net-mvc-3

这部分观点让我很困惑......

我想在主视图中加载局部视图...

这是简单的例子......

我正在加载Homecontroller Index操作的Index.cshtml作为主页面.

在index.cshtml我正在创建一个链接

@Html.ActionLink("load partial view","Load","Home")
Run Code Online (Sandbox Code Playgroud)

在HomeController中我添加了一个名为的新Action

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}
Run Code Online (Sandbox Code Playgroud)

在_LoadView.cshmtl我只是有一个

<div>
    Welcome !!
</div>
Run Code Online (Sandbox Code Playgroud)

但是,当运行项目时,index.cshtml首先渲染并向我显示链接"加载部分视图"...当我点击它时,它转到新页面instade,将欢迎消息从_LoadView.cshtml呈现到index.cshtml .

有什么不对?

注意:我不想通过AJAX加载页面或者不想使用Ajax.ActionLink

Dar*_*rov 149

如果要直接在主视图中加载局部视图,可以使用Html.Action帮助器:

@Html.Action("Load", "Home")
Run Code Online (Sandbox Code Playgroud)

或者如果您不想通过Load操作,请使用HtmlPartial hepler:

@Html.Partial("_LoadView")
Run Code Online (Sandbox Code Playgroud)

如果您想使用Ajax.ActionLink,请将其替换Html.ActionLink为:

@Ajax.ActionLink(
    "load partial view", 
    "Load", 
    "Home", 
    new AjaxOptions { UpdateTargetId = "result" }
)
Run Code Online (Sandbox Code Playgroud)

当然,您需要在页面中包含一个显示部分的持有者:

<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

另外不要忘记包括:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

在主视图中以启用Ajax.*帮助程序.并确保在web.config中启用了不显眼的javascript(默认情况下应该是这样):

<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Run Code Online (Sandbox Code Playgroud)


Sco*_*ott 16

我有与莱尼尔完全相同的问题.我在这里和其他十几个地方尝试过修复.最终对我有用的事情就是添加

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
Run Code Online (Sandbox Code Playgroud)

我的布局......

  • +1为什么没有人投票给你我...没有两个进口,它不起作用.. (2认同)

Maj*_*yte 5

如果您使用@Html.ActionLink()然后加载,则在单击锚元素时将PartialView作为正常请求处理,即加载具有PartialViewResult方法响应的新页面.
如果你想加载itmedialty,那么你使用@Html.RenderPartial("_LoadView")@Html.RenderAction("Load").
如果你想在用户交互(即点击链接)上进行,那么你需要使用AJAX - >@Ajax.ActionLink()


小智 5

对我来说,这是通过NuGet下载AJAX Unobtrusive库之后的工作:

 Search and install via NuGet Packages:   Microsoft.jQuery.Unobtrusive.Ajax
Run Code Online (Sandbox Code Playgroud)

在视图中添加对jquery和AJAX Unobtrusive的引用:

@Scripts.Render("~/bundles/jquery")
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"> </script>
Run Code Online (Sandbox Code Playgroud)

接下来我们要渲染Ajax ActionLinkdiv:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)

<div id="toUpdate"></div>
Run Code Online (Sandbox Code Playgroud)


Jai*_*ave 5

如果您想在视图中填充部分视图的内容,您可以使用

@Html.Partial("PartialViewName")
Run Code Online (Sandbox Code Playgroud)

或者

{@Html.RenderPartial("PartialViewName");}
Run Code Online (Sandbox Code Playgroud)

如果您想发出服务器请求并处理数据,然后将部分视图返回到填充了该数据的主视图,您可以使用

...
    @Html.Action("Load", "Home")
...

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}
Run Code Online (Sandbox Code Playgroud)

如果您希望用户单击链接,然后填充部分视图的数据,您可以使用:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName",
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)
Run Code Online (Sandbox Code Playgroud)