如何解决将元数据表单XML文件读取到共享的_Layout中-ASP.NET Core
我正在使用ASP.NET Core剃须刀页面开发应用程序。我已经将元数据保存在XML文件中;我将其保存为xml的原因是,在CMS系统中,我为用户提供了写入和读取XML文件的选项,以便用户可以更改元数据。
现在,我想在共享的title
中读取和显示元数据description
和_layout.cshtml
,以便在所有页面上显示相同的描述。由于_layout.cshtml
没有关联的.cs
文件来写入C#代码,因此我无法读取XML文件。
我可以在index.cshtml.cs
共享的XDocument
的单个页面中阅读它,但不能在所有页面的共享_layout.cshtml
中阅读。
index.cshtml.cs
public async Task<IActionResult> OnGetAsync()
{
/*
*
* Reading Meta Title,Description,Keywords
*
*/
var filepath = _env.ContentRootPath.ToString() + @"\meta-data.xml";
XDocument xmlDoc = XDocument.Load(filepath);
// Run query
IEnumerable<XElement> metaList = xmlDoc.Root.Elements("meta");
var result = from a in metaList
select new
{
title = a.Element("title").Value.Trim(),description = a.Element("description").Value.Trim(),keywords = a.Element("keywords").Value.Trim()
};
if (entity.DomainId == 1) // jaeger
{
ViewData["xml_title"] = result.ElementAt(0).title;
ViewData["xml_description"] = result.ElementAt(0).description;
ViewData["xml_keywords"] = result.ElementAt(0).keywords;
}
else
{
ViewData["xml_title"] = result.ElementAt(1).title;
ViewData["xml_description"] = result.ElementAt(1).description;
ViewData["xml_keywords"] = result.ElementAt(1).keywords;
}
.....
}
_layout.cshtml
@using Jaeger.Services
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
@inject MenuMasterService menus
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
@*<meta name="format-detection" content="telephone=no">*@
<title>@ViewData["Title"] - @ViewData["xml_title"]</title>
<meta name="description" content="@ViewData["xml_description"] ">
<meta name="keywords" content="@ViewData["xml_keywords"] ">
....
解决方法
不确定entity
是什么,有关如何在共享的title
中显示元数据description
和_Layout.cshtml
的信息,您可以参考以下代码:
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment _env;
@using System.Xml.Linq;
@{
var filepath = _env.ContentRootPath.ToString() + @"\meta-data.xml";
XDocument xmlDoc = XDocument.Load(filepath);
IEnumerable<XElement> metaList = xmlDoc.Root.Elements("meta");
var result = from a in metaList
select new
{
title = a.Element("title").Value.Trim(),description = a.Element("description").Value.Trim(),keywords = a.Element("keywords").Value.Trim()
};
ViewData["xml_title"] = result.ElementAt(0).title;
ViewData["xml_description"] = result.ElementAt(0).description;
ViewData["xml_keywords"] = result.ElementAt(0).keywords;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
@*<meta name="format-detection" content="telephone=no">*@
<title>@ViewData["Title"] - @ViewData["xml_title"]</title>
<meta name="description" content="@ViewData["xml_description"] ">
<meta name="keywords" content="@ViewData["xml_keywords"] ">
.....
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。