在 Sitecore 输出视图中的一个 link 标签
In Sitecore output a link tag in View
在 Sitecore 中,我有一个控制器渲染,它动态循环遍历多列表中的所有导航栏项目并将它们输出到视图。
我试过下面的代码:
<li class="first-child"><a href="@i.Url">@i.Name</a></li>
但是,当我在浏览器中检查元素时,会出现:
<a href="<link linktype="external"; url="";https://www.example.com/en-gb/london/eat"; anchor="" target="" />">Eat</a>
上面一行在 Eat 之前产生了一个额外的 >。我有什么要
我也在视图中尝试过这种语法:
<li class="first-child">
<a href="@Html.Sitecore().Field("Url", i);">
@Html.Sitecore().Field("Name", i);
</a>
</li>
当我在浏览器中检查元素时,我得到了这个:
<a href=";"> ; </a>
我需要帮助在视图中呈现此内容,我们将不胜感激任何有关语法的帮助。
编辑
我的控制器操作方法如下所示:
public ActionResult FooterCities()
{
var model = new List<FooterCities>();
var footercitycategories = Sitecore.Context.Item;
var item = (Sitecore.Data.Fields.MultilistField)footercitycategories.Fields["FooterCities"];
foreach (var m in item.GetItems())
{
model.Add(
new FooterCities()
{
Name = m["Name"],
CityUrl = m["CityUrl"]
});
}
return View("/Views/Example/Layouts/LayoutRenderings/ViewRendering/FooterCities.cshtml", model);
}
尝试这样的事情:
@Html.Sitecore().BeginField("Url", new { haschildren= true })
@Html.Sitecore().Field("Name")
@Html.Sitecore().EndField()
上面的代码从另一个 SO 答案复制而来,解释了如何在此处的 link 字段中使用文本字段: .
或其他选项:
@Html.Sitecore().Field("Url", new {text = @Html.Sitecore().Field("Name")})
杰森在这里解释道:https://theagilecoder.wordpress.com/2014/10/06/sitecore-mvc-editable-links-wrapping-text-and-images/
假设您 i
是 Item
class 的对象,您应该将其作为第二个参数传递。方法定义为:
public virtual HtmlString Field(string fieldName, Item item, object parameters)
所以在你的情况下应该是:
@Html.Sitecore().Field("Url", i, new {text = @Html.Sitecore().Field("Name")})
编辑 在你展示你的控制器代码后
你应该改变模型生成的方式。使用:
foreach (var m in item.GetItems())
{
Sitecore.Data.Fields.LinkField urlField = m.Fields["CityUrl"];
string url = urlField.GetFriendlyUrl();
model.Add(
new FooterCities()
{
Name = m["Name"],
CityUrl = url
});
}
然后在视图中:
<li class="first-child">
<a href="i.CityUrl">
i.Name
</a>
</li>
在 Sitecore 中,我有一个控制器渲染,它动态循环遍历多列表中的所有导航栏项目并将它们输出到视图。
我试过下面的代码:
<li class="first-child"><a href="@i.Url">@i.Name</a></li>
但是,当我在浏览器中检查元素时,会出现:
<a href="<link linktype="external"; url="";https://www.example.com/en-gb/london/eat"; anchor="" target="" />">Eat</a>
上面一行在 Eat 之前产生了一个额外的 >。我有什么要
我也在视图中尝试过这种语法:
<li class="first-child">
<a href="@Html.Sitecore().Field("Url", i);">
@Html.Sitecore().Field("Name", i);
</a>
</li>
当我在浏览器中检查元素时,我得到了这个:
<a href=";"> ; </a>
我需要帮助在视图中呈现此内容,我们将不胜感激任何有关语法的帮助。
编辑
我的控制器操作方法如下所示:
public ActionResult FooterCities()
{
var model = new List<FooterCities>();
var footercitycategories = Sitecore.Context.Item;
var item = (Sitecore.Data.Fields.MultilistField)footercitycategories.Fields["FooterCities"];
foreach (var m in item.GetItems())
{
model.Add(
new FooterCities()
{
Name = m["Name"],
CityUrl = m["CityUrl"]
});
}
return View("/Views/Example/Layouts/LayoutRenderings/ViewRendering/FooterCities.cshtml", model);
}
尝试这样的事情:
@Html.Sitecore().BeginField("Url", new { haschildren= true })
@Html.Sitecore().Field("Name")
@Html.Sitecore().EndField()
上面的代码从另一个 SO 答案复制而来,解释了如何在此处的 link 字段中使用文本字段: .
或其他选项:
@Html.Sitecore().Field("Url", new {text = @Html.Sitecore().Field("Name")})
杰森在这里解释道:https://theagilecoder.wordpress.com/2014/10/06/sitecore-mvc-editable-links-wrapping-text-and-images/
假设您 i
是 Item
class 的对象,您应该将其作为第二个参数传递。方法定义为:
public virtual HtmlString Field(string fieldName, Item item, object parameters)
所以在你的情况下应该是:
@Html.Sitecore().Field("Url", i, new {text = @Html.Sitecore().Field("Name")})
编辑 在你展示你的控制器代码后
你应该改变模型生成的方式。使用:
foreach (var m in item.GetItems())
{
Sitecore.Data.Fields.LinkField urlField = m.Fields["CityUrl"];
string url = urlField.GetFriendlyUrl();
model.Add(
new FooterCities()
{
Name = m["Name"],
CityUrl = url
});
}
然后在视图中:
<li class="first-child">
<a href="i.CityUrl">
i.Name
</a>
</li>