在Sitecore中,我有一个控制器渲染,它动态地循环遍历multi列表中的所有导航栏项,并将它们输出到视图。
我试过下面的代码:
<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>
我需要帮助在视图中渲染这个,任何语法帮助将非常感激。
编辑
我的Controller动作方法如下所示:
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()
上面的代码复制自另一个解释如何在链接字段中使用文本字段的回答:https://stackoverflow.com/a/32848931/157833 .
或其他选项:
@Html.Sitecore().Field("Url", new {text = @Html.Sitecore().Field("Name")})
由Jason在这里解释:https://theagilecoder.wordpress.com/2014/10/06/sitecore-mvc-editable-links-wrapping-text-and-images/
假设您的i
是Item
类的对象,您应该将其作为第二个参数传递。方法定义为:
public virtual HtmlString Field(string fieldName, Item item, object parameters)
所以在你的例子中应该是:
@Html.Sitecore().Field("Url", i, new {text = @Html.Sitecore().Field("Name")})
EDIT显示控制器代码后
你应该改变模型生成的方式。用途:
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>