Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Sitecore()格式化Sitecore日期。字段()?_C#_Sitecore_Sitecore7_Sitecore7.5 - Fatal编程技术网

C# 使用Sitecore()格式化Sitecore日期。字段()?

C# 使用Sitecore()格式化Sitecore日期。字段()?,c#,sitecore,sitecore7,sitecore7.5,C#,Sitecore,Sitecore7,Sitecore7.5,我需要为日期使用自定义格式(即,dddd-dd-MMMM-yyyy)。是否可以将此格式传递到Sitecore().Field()?我想这样做: public static HtmlString RenderField(this SitecoreHelper sitecoreHelper, string fieldNameOrId, Item item, bool disableWebEdit = false, SafeDictionary<string> parameters

我需要为日期使用自定义格式(即,
dddd-dd-MMMM-yyyy
)。是否可以将此格式传递到
Sitecore().Field()
?我想这样做:

    public static HtmlString RenderField(this SitecoreHelper sitecoreHelper, string fieldNameOrId, Item item, bool disableWebEdit = false, SafeDictionary<string> parameters = null)
    {
        if (parameters == null)
        {
            parameters = new SafeDictionary<string>();
        }

        return sitecoreHelper.Field(fieldNameOrId, item,
            new
            {
                DisableWebEdit = disableWebEdit,
                Parameters = parameters
            });
    }
@Html.Sitecore().Field(“Day1”,新的{@format=“dddd-dd-MMMM-yyyy”})

然而,在谷歌搜索之后,我发现我要么要创建一个自定义字段助手来完成这项工作,要么要创建一个自定义模型。使用基本Sitecore真的没有办法做到这一点吗?通过
Sitecore().Field()
完成这项工作非常重要,因为我需要内容编辑器来编辑值


据我所知,我们使用的是Sitecore 7.5

,Sitecore没有现成的功能。 您可以使用此功能的助手,请检查下面的代码。 我使用了这个代码,工作正常。您还可以从页面编辑器编辑日期字段,因为该字段是通过Sitecore管道编辑的

public static class Helper
{

    public static HtmlString RenderField(
      this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper,
      string fieldNameOrId,
      bool disableWebEdit = false,
      SC.Collections.SafeDictionary<string> parameters = null)
    {
        if (parameters == null)
        {
            parameters = new SC.Collections.SafeDictionary<string>();
        }

        return sitecoreHelper.Field(
          fieldNameOrId,
          new
            {
                DisableWebEdit = disableWebEdit,
                Parameters = parameters
            });
    }

    public static HtmlString RenderField(
      this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper,
      SC.Data.ID fieldId,
      bool disableWebEdit = false,
      SC.Collections.SafeDictionary<string> parameters = null)
    {
        return RenderField(
          sitecoreHelper,
          fieldId.ToString(),
          disableWebEdit,
          parameters);
    }

    public static HtmlString RenderDate(
      this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper,
      string fieldNameOrId,
      string format = "D",
      bool disableWebEdit = false,
      bool setCulture = true,
      SC.Collections.SafeDictionary<string> parameters = null)
    {
        if (setCulture)
        {
            Thread.CurrentThread.CurrentUICulture =
              new CultureInfo(SC.Context.Language.Name);
            Thread.CurrentThread.CurrentCulture =
              CultureInfo.CreateSpecificCulture(SC.Context.Language.Name);
        }

        if (parameters == null)
        {
            parameters = new SC.Collections.SafeDictionary<string>();
        }

        parameters["format"] = format;
        return RenderField(
          sitecoreHelper,
          fieldNameOrId,
          disableWebEdit,
          parameters);
    }

    public static HtmlString RenderDate(
      this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper,
      SC.Data.ID fieldId,
      string format = "D",
      bool disableWebEdit = false,
      bool setCulture = true,
      SC.Collections.SafeDictionary<string> parameters = null)
    {
        return RenderDate(
          sitecoreHelper,
          fieldId.ToString(),
          format,
          disableWebEdit,
          setCulture,
          parameters);
    }

    public static HtmlString TagField(
      this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper,
      string fieldNameOrId,
      string htmlElement,
      bool disableWebEdit = false,
      SC.Collections.SafeDictionary<string> parameters = null)
    {
        SC.Data.Items.Item item =
          SC.Mvc.Presentation.RenderingContext.Current.ContextItem;

        if (item == null || String.IsNullOrEmpty(item[fieldNameOrId]))
        {
            return new HtmlString(String.Empty);
        }

        string value = sitecoreHelper.RenderField(
          fieldNameOrId,
          disableWebEdit,
          parameters).ToString();
        return new HtmlString(String.Format(
          "<{0}>{1}</{0}>",
          htmlElement,
          value));
    }

    public static HtmlString TagField(
      this SC.Mvc.Helpers.SitecoreHelper sitecoreHelper,
      SC.Data.ID fieldId,
      string htmlElement,
      bool disableWebEdit = false,
      SC.Collections.SafeDictionary<string> parameters = null)
    {
        return TagField(
          sitecoreHelper,
          fieldId.ToString(),
          htmlElement,
          disableWebEdit,
          parameters);
    }
}
John West在此处介绍如何扩展sitecore帮助程序:

我修改了@siteCoreclimper答案,因为它不适用于呈现子项,因为它使用默认的
RenderingContext.Current

因此,我更新了每个方法参数并添加了
项Item
,并将该项用于基本字段渲染,如下所示:

    public static HtmlString RenderField(this SitecoreHelper sitecoreHelper, string fieldNameOrId, Item item, bool disableWebEdit = false, SafeDictionary<string> parameters = null)
    {
        if (parameters == null)
        {
            parameters = new SafeDictionary<string>();
        }

        return sitecoreHelper.Field(fieldNameOrId, item,
            new
            {
                DisableWebEdit = disableWebEdit,
                Parameters = parameters
            });
    }
public static HtmlString RenderField(此SitecoreHelper SitecoreHelper,字符串字段名ORID,项项项,bool disableWebEdit=false,SafeDictionary参数=null)
{
if(参数==null)
{
参数=新的SafeDictionary();
}
返回sitecoreHelper.Field(fieldNameOrId,item,
新的
{
DisableWebEdit=DisableWebEdit,
参数=参数
});
}
因此,在我的MVC视图中,我现在可以:

@foreach (Item item in @Model.Item.Children)
{
    <div class="event-date">
        @Html.Sitecore().RenderDate("Date", item, "d MMM")
    </div>
}
@foreach(@Model.Item.Children中的项目)
{
@Html.Sitecore().RenderDate(“日期”,项,“d MMM”)
}

您可以使用下面的字段呈现语法格式化日期,该语法简单且现成

@Html.Sitecore().Field("Date Field", new {format="MMM dd, yyyy"})

就这样。格式值利用了。

对于那些在处理空格时遇到问题的人,只需将所有空格替换为“\n”

这里举一个例子:

@Html.Sitecore().Field(datefield, new {format="MMM\ndd,\nyyyy"})

谢谢,行得通。另外,我只想确认与我的原始问题相关的任何内容都不需要标记域方法,对吗?@MrSnappingTurtle you's right标记域未使用。如果答案正确,请把它标为正确。其他人将来会使用此响应。@SiteCoreClimper,我已经使用但修改了您的代码,因为我需要将其用于当前上下文项的子项。修改了下面的答案。好吧,但你为什么要给出其他答案呢?:)我不认为这在Sitecore 8中是必要的,我认为它已在更高版本中引入,因为这在SXP8.2@Html.Sitecore().Field(“开始日期”,new{format=“dd MMMM yyyy”})中非常适合我。我记得这是参加Sitecore开发者在线学习时的一个选项。如果我没弄错的话,第四单元。这门课是第8课。