除了它返回的类型以及你当然以不同方式调用它的事实
<% Html.RenderPartial(...); %>
<%= Html.Partial(...) %>
Run Code Online (Sandbox Code Playgroud)
如果它们不同,你为什么要打电话给一个而不是另一个?
定义:
// Type: System.Web.Mvc.Html.RenderPartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll
using System.Web.Mvc;
namespace System.Web.Mvc.Html
{
public static class RenderPartialExtensions
{
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName);
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData);
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model);
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model,
ViewDataDictionary viewData);
}
}
// …Run Code Online (Sandbox Code Playgroud) 这是有效的,因为它返回字符串中部分视图呈现的结果:
@Html.Partial("Path/to/my/partial/view")
Run Code Online (Sandbox Code Playgroud)
但我更喜欢使用RenderPartial,似乎我需要写:
@{Html.RenderPartial("Path/to/my/partial/view");}
Run Code Online (Sandbox Code Playgroud)
代替:
@Html.RenderPartial("Path/to/my/partial/view");
Run Code Online (Sandbox Code Playgroud)
让它工作.错误信息:
Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
Run Code Online (Sandbox Code Playgroud)
如果有更好的方法而不是@{...}只为一个方法调用打开代码块?
我想在我的mvc项目的每个视图页面上放一个随机图像.所以我创建了一个方法,它返回一个partialView并在共享的Layout页面中调用该方法.
当我尝试使用正确的用户名和密码登录时,此工作正常.使用的是插入的,每个页面都包含一个随机图像.但是当我给出用户名和密码的无效组合时.共享布局页面找不到我想用我调用的控制器,@Html.Action并且实际上应该返回登录视图,并带有错误消息"用户名和密码的无效组合"和当前的随机图像.
的InnerException:
{"在控制器'Project.WebUI.Controllers.HomeController'上找不到公共操作方法'RandomSponsor'."}
我在共享布局中的Html.Action.
@Html.Action("RandomSponsor", "Home")
Run Code Online (Sandbox Code Playgroud)
家庭控制器中的方法.
[HttpGet]
[ChildActionOnly]
public ActionResult RandomSponsor()
{
var model = service.getRandomSponsor();
return PartialView("RandomSponsor", model);
}
Run Code Online (Sandbox Code Playgroud)
getRandomSponsor方法工作正常,这个方法总是返回一个随机字符串值,返回到RandomSponsor.cshtml视图.
RandomSponsor.schtml(仅包含图像字符串)
<img src="~/Content/Images/Advert/@(Model)" alt="a" />
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了这个问题,但没有找到解决方案,有没有人知道这个问题的答案?HttpGet的HttpGet可能会有什么问题吗?
问候.
我想阻止我的一些页面显示在搜索结果中.我的理解是我<head>在页面的部分添加了以下内容:
<meta name="robots" content="noindex,nofollow"/>
Run Code Online (Sandbox Code Playgroud)
问题是我的页面使用了一个常见的布局页面.就像是:
@{
Layout = "~/Views/Shared/_VanillaLayout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
布局页面内部是头部,包含大量链接,脚本和元标记.我不想为可索引和不可索引的页面复制它.
根据我的研究,我发现: -
<head>部分很糟糕.希望我错过了一些东西并且有一种很好的(非坏的)方法可以做到这一点,或者我上面提到的其中一种方法毕竟不是那么糟糕.
我正在构建一个配置文件页面,其中包含许多与特定模型(租户)相关的部分 - AboutMe,MyPreferences - 这些事情.这些部分中的每一部分都将是部分视图,以允许使用AJAX进行部分页面更新.
当我点击ActionResultTenantController中的一个时,我能够创建一个强类型视图,并将模型数据传递给视图.部分观点无法实现这一点.
我创建了一个局部视图_TenantDetailsPartial:
@model LetLord.Models.Tenant
<div class="row-fluid">
@Html.LabelFor(x => x.UserName) // this displays UserName when not in IF
@Html.DisplayFor(x => x.UserName) // this displays nothing
</div>
Run Code Online (Sandbox Code Playgroud)
然后我有一个视图MyProfile,将呈现提到的部分视图:
@model LetLord.Models.Tenant
<div class="row-fluid">
<div class="span4 well-border">
@Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml",
new ViewDataDictionary<LetLord.Models.Tenant>())
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我将代码包装在DIV _TenantDetailsPartial里面@if(model != null){},那么页面上就不会显示任何内容,所以我猜测有一个空模型被传递给视图.
为什么我ActionResult在'session'中创建一个来自用户的强类型视图会被传递给视图?如何将'session'中的用户传递给不是从ActionResult?创建的局部视图?如果我遗漏了这个概念,请解释一下.
我仍然没有得到Html.Actionasp.net mvc 的主要目的 .Html.Partial每次我需要加载局部视图或想要在视图中拆分一些代码来清理它时我一直在使用.
哪里Html.Action适合所有这一切(例如,你会在哪里要使用Html.Action和不使用Html.Partial)?
编辑
答案似乎是使用Html.Action动态数据.我没有得到这个,因为你也可以使用动态数据的部分视图.
例如,如果我网站上的用户编辑了一行.对方法进行ajax调用,然后从db中获取该行.然后,我返回一个表格的parital视图,其中包含所有数据,可以进行编辑.如果发生错误,那么我使用错误方法返回json结果,我的javascript使用它并提醒用户.
如果一切正常,则将渲染的html放入jquery对话框并显示给用户.
是因为你可以使用让人们使用Action的"ChildActionOnlyAttribute"吗?
我在其中一个视图页面中跟踪了loc:
@* Html.Partial("Form")*@
@{
var role = Convert.ToInt32(Session["Role"]);
if (role == 2)
{
Html.Partial("Form");
}
}
Run Code Online (Sandbox Code Playgroud)
在Html.Partial("Form") 当其以外的if语句,并呈现一切细腻精致的作品.
但是当在一个if块里面它什么也没有渲染时,如果语句被命中,那是真的,调试器eves读取函数并进入Form Partial view并遍历其中的每一行,但最后页面上没有输出.
请帮助
我想知道如何在运行剃刀视图中包含另一个剃刀页面,就像PHP的"包含"术语一样.它可以被视为部分类.一半的工作是在a.cshtml完成的,另一半的工作是在b.cshtml完成的.但实际上其中两个是作为一个剃刀页面构建的.
任何想法将不胜感激......
我正在使用MVC 4并希望稍微整理一下我的视图,因此决定在渲染过程中创建多个局部视图并将它们组合在一起.
当渲染的视图很少 @Html.RenderPartial('path\to\my\partialView.cshtml')但是失败时,如果此partialView.cshtml又在其中进一步@Html.RenderPartial('path\to\my\otherPartialView.cshtml')定义,则此方法有效.
我得到的错误就像使用RenderPartial或Partial方法一样
error CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
error CS1503: Argument 1: cannot convert from 'void' to 'System.Web.WebPages.HelperResult'
Run Code Online (Sandbox Code Playgroud)
有没有办法在MVC4中我们可以实现整理我的大视图标记文件?即尝试逐步用其他部分视图组成部分视图.
编辑
只是为了提供更多细节.
我的移动视图如下所示:
文件:ManageLoads.Mobile.cshtml
位置:Views-> Shipper-> ManageLoads
在这个视图中我有这样的代码:
<div id="landingPage" ng-show="MenuSelection=='DefaultPage'">
@Html.Partial("~/Views/Shipper/_DashboardPartial.cshtml")
<div class='message {{MessageClass}}'>
? <i class='{{MessageIcon}}'></i>
? <p>{{Message}}</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这部分工作正常没有问题.现在在_DashboardPartial.cshtml中,如果我引用了另一个局部视图,它就会失败.
<div id="warehouseSelection" ng-show="getStep()==1">
{@Html.RenderPartial("~/Views/Shipper/mobilePartials/_MyWarehouse.cshtml");}
</div>
Run Code Online (Sandbox Code Playgroud)
这会打破并抛出错误,但如果我复制粘贴"_MyWarehouse.cshtml"的内容,它会再次开始工作.我已经验证了_MyWarehouse.cshtml的路径是正确的,所以我怀疑它与导致问题的RenderPartial方法的嵌套有关.
关心Kiran