73

我对这种片面的看法很困惑。

我想在我的主视图中加载部分视图。

这是一个简单的例子。

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

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

@Html.ActionLink("load partial view","Load","Home")

在 HomeController 我添加了一个名为的新动作

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}

在 _LoadView.cshmtl 我只是有一个

<div>
    Welcome !!
</div>

但是,在运行项目时,index.cshtml 首先呈现并向我显示链接“加载部分视图”。当我单击它时,它会转到将欢迎消息从 _LoadView.cshtml 呈现到 index.cshtml 的新页面。

有什么问题?

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

4

7 回答 7

155

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

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

或者,如果您不想执行 Load 操作,请使用 HtmlPartialAsync 帮助器:

@await Html.PartialAsync("_LoadView")

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

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

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

<div id="result"></div>

也不要忘记包括:

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

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

<add key="UnobtrusiveJavaScriptEnabled" value="true" />
于 2011-09-03T21:13:49.090 回答
15

我和莱尼尔有同样的问题。我尝试了这里和其他十几个地方建议的修复。最终对我有用的东西只是添加

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")

到我的布局...

于 2013-07-06T16:16:31.993 回答
5

如果您这样做,@Html.ActionLink()则在单击锚元素时将加载 PartialView 作为正常请求处理,即使用 PartialViewResult 方法的响应加载新页面。
如果你想立即加载它,那么你使用@Html.RenderPartial("_LoadView")or @Html.RenderAction("Load")
如果您想在用户交互时执行此操作(即单击链接),那么您需要使用 AJAX -->@Ajax.ActionLink()

于 2011-09-03T21:17:45.323 回答
5

对我来说,这在我通过 NuGet 下载 AJAX Unobtrusive 库后起作用:

 Search and install via NuGet Packages:   Microsoft.jQuery.Unobtrusive.Ajax

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

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

接下来是我们想要渲染结果的 Ajax ActionLinkdiv :

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

<div id="toUpdate"></div>
于 2015-01-05T14:08:46.073 回答
3

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

@Html.Partial("PartialViewName")

或者

{@Html.RenderPartial("PartialViewName");}

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

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

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}

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

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName",
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)
于 2017-03-15T04:21:19.327 回答
1

小tweek到上面

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

<div id="toUpdate"></div>
于 2015-02-21T18:41:14.620 回答
1

RenderParital 更适合用于性能。

{@Html.RenderPartial("_LoadView");}
于 2016-07-01T05:44:40.600 回答