这是我们第一次尝试 Umbraco,我们正在按照官方教程创建 Arcticle/新闻功能作为示例。
我们基本上从这里开始
因此,首先我们创建了一个主页和一个母版页,以及介于两者之间的所有内容,直到我们到达这一点。
显示的所有内容都有效,我们有一个概述,宏观/部分视图运行良好。
但是当我们想要导航到实际的 ArticleItem 时,我们遇到了标题中提到的错误。
无法将源内容类型 Umbraco.Web.PublishedContentModels.ArticlesItem 绑定到模型内容类型 Umbraco.Web.PublishedContentModels.ArticlesMain。视图模型和内容模型都是 PureLive,版本相同。该应用程序处于不稳定状态,应重新启动。
现在,我的猜测是 Masterpage 作为 ArticlesMain 模板存在问题,这强制使用该模型/传递到 ArticlesItem 页面。但是我的MVC已经很生疏了,所以现在我自己似乎无法找出解决方案。
使用的代码是从教程中 1:1 复制的,以确保我们没有弄乱任何东西,但到目前为止还没有出现任何问题。我们也在 Umbraco CMS 中完成了所有操作,我们的 IDE (VS) 没有使用。
/Views/ArticlesMain.cshtml
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
<ContentModels.ArticlesMain>
@using ContentModels = Umbraco.Web.PublishedContentModels; @{ Layout = "HomePage.cshtml"; }
<div id="main-container">
<div id="main" class="wrapper clearfix">
<section>
<h2>@Umbraco.Field("articlesTitle")</h2>
<p>@Umbraco.Field("articlesBodyText")</p>
<p>@Umbraco.RenderMacro("listArticles")</p>
</section>
</div>
<!-- #main -->
</div>
<!-- #main-container -->Run Code Online (Sandbox Code Playgroud)
/Views/ArticlesItem.cshtml
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
<ContentModels.ArticlesItem>
@using ContentModels = Umbraco.Web.PublishedContentModels; @{ Layout = "ArticlesMain.cshtml"; }
<h1>@Umbraco.Field("articlesTitle")</h1>
<article> …Run Code Online (Sandbox Code Playgroud)我通常从事 ASP.NET Core MVC 项目,但目前正在开发 Umbraco 网站。我注意到但不明白的一个区别是文件夹.cshtml中的文件Views(即 Umbraco 模板)仅在解决方案资源管理器的文件夹视图中可见。为什么它们不像在普通 MVC 项目中那样包含在项目中并且在普通解决方案资源管理器视图中可见?
例子:
文件夹视图:
正常解决方案资源管理器视图:
目前的替代方案是umbraco.cms.businesslogic.web.Access.GetAccessingMembershipRoles什么?因为 umbraco 7.6 将其突出显示为已过时并告诉使用IPublicAccessService
虽然我无法找到如何使用它,但我所要做的就是
IContent content = GetById(id);
Attempt<PublicAccessEntry> access = _publicAccessService.IsProtected(content);
Run Code Online (Sandbox Code Playgroud)
它没有关于当前页面角色的任何信息。
我有两个域名 www.example.com 和 www.example.net 指向同一个网站。www.example.com 是我的主域(主域)。我想在所有页面上设置规范 URL,以便每当用户/机器人看到 www.example.net 上的页面时,就会呈现规范元素并指向 www.example.com 上的页面。
示例:如果用户正在查看页面 www.example.net/pagename,则应将规范元素呈现为指向 www.example.com/pagename
<link href="https://www.example.com/pagename" rel="canonical">
Run Code Online (Sandbox Code Playgroud)
因此,页面名称将是动态的并且会针对每个页面而变化。
这可以使用 JavaScript 来实现吗?如果没有,我们可以使用 C# 做同样的事情,因为该网站是基于 Asp.Net MVC / Umbraco 构建的。
谢谢
我有以下几点:
var tagId = "5288";
source.Where(p => p.GetPropertyValue<IEnumerable<string>>("picker").Contains(tagId));
Run Code Online (Sandbox Code Playgroud)
这将返回错误 System.ArgumentNullException: Value cannot be null.
所以一些返回的结果,不包含一个picker值。在上述声明中,我将如何检查这一点?
它是一个 Umbraco 多节点树选择器,它是“选择器”值。
我有一个循环新闻项目节点.在其他属性中,这些新闻项具有创建日期的两个属性.系统添加日期和用户输入创建日期(以覆盖系统日期).我希望列表按创建日期排序,并在用户输入的日期中按首选项排序.
以下是我卑微的无效尝试!
<xsl:for-each select="$currentPage/ancestor-or-self::node /node [@nodeTypeAlias = $documentTypeAlias and string(data [@alias='umbracoNaviHide']) != '1']">
<xsl:choose>
<xsl:when test="data [@alias = 'createdDate'] != ''">
<xsl:variable name="sort" select="string(data [@alias = 'createdDate'])"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="sort" select="string(@createDate)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:sort select="$sort" order="descending"/>
Run Code Online (Sandbox Code Playgroud)
非常感谢
我有以下XSLT
<xsl:param name="productsId" select="/macro/productsId" />
<xsl:param name="type" select="/macro/type" /> <!-- value1, value2, value3 -->
<xsl:template match="/">
<xsl:if test="$productsId > 0">
<xsl:variable name="products" select="umbraco.library:GetXmlNodeById($productsId)" />
<div id="carousel-wrap">
<ul id="carousel">
<xsl:for-each select="$products/Product [select only Product with attribute value1, value2 or value3 based on /macro/type]">
<li id="p-{@id}">
<xsl:variable name="title">
<xsl:choose>
<xsl:when test="string-length(productHeading) > 0">
<xsl:value-of select="productHeading" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@nodeName" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{umbraco.library:NiceUrl(@id)}">
<!-- Image -->
<xsl:if test="productImage > 0">
<xsl:variable name="productImage" select="umbraco.library:GetMedia(productImage, 0)" />
<img src="/ImageGen.ashx?image={$productImage/umbracoFile}&height=131" />
</xsl:if> …Run Code Online (Sandbox Code Playgroud) 我有一个名为blogCategoriesList(其类型为字符串)的列表,其中填充了每个博客类别的值,因为它通过检查类别下拉属性中定义的值来遍历每个页面.因此,如果我在我的网站上有三篇博客帖子,并且类别被定义为足球,飞镖,飞镖那么这就是列表所包含的内容.
我试图做一个if检查验证是否
例子
blogCategoriesList =足球,飞镖,飞镖
如果我在一个将类别设置为飞镖的页面上,那么if测试应该通过,因为列表包含飞镖,并且它在列表中也有多个用于飞镖的条目.
blogCategoriesList =足球,计算机,飞镖
如果我在一个将类别设置为飞镖的页面上,则if测试将失败,因为列表包含飞镖,但它在列表中没有多个用于飞镖的条目.
我一直在尝试使用以下使用groupby的代码,但目前正在努力使其工作.
@if (blogCategoriesList.Contains(Model.Content.GetPropertyValue("category")) && blogCategoriesList.GroupBy(n => n.Equals(Model.Content.GetPropertyValue("category"))).Any(c => c.Count() > 1))
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒
非常感谢
保罗
编辑*所以使用下面的建议我已经更新了我的代码
@if (blogCategoriesList.Contains(@Model.Content.GetPropertyValue("category")) && blogCategoriesList.Where(x => x == @Model.Content.GetPropertyValue("category")).Count() > 1)
@if (blogCategoriesList.Contains(@Model.Content.GetPropertyValue("category")) && blogCategoriesList.Where(x => x == @Model.Content.GetPropertyValue("category")).Skip(1).Any())
Run Code Online (Sandbox Code Playgroud)
但现在我的测试总是失败并且没有意义.当前页面属于类别计算.您可以从我的调试中看到类别列表中有多个计算值
我试图在Umbraco V7.4.3中创建一个自定义数据类型,它是一个Dropdown,其中将从Sql语句中获取prevalues.我能够创建下拉列表
[PropertyEditor(PropertyEditorConstants.SqlDropDownAlias, " Sql DropDown", "/App_Plugins/CustomDataType/DropDown/DropDownEditor.html", ValueType = "TEXT")]
[PropertyEditorAsset(ClientDependencyType.Javascript, "/App_Plugins/CustomDataType/DropDown/DropDownEditor.controller.js")]
public class SqlDropDownPropertyEditor:BasePropertyEditor
{
protected override PreValueEditor CreatePreValueEditor()
{
return new SqlDropDownPreValueEditor();
}
}
Run Code Online (Sandbox Code Playgroud)
关于如何在数据类型中提供SQL表达框并进行处理的任何想法?
umbraco ×10
asp.net-mvc ×4
c# ×4
umbraco7 ×3
xslt ×2
html ×1
javascript ×1
linq ×1
model ×1
razor ×1
sorting ×1
user-roles ×1
xml ×1
xpath ×1