我有一个多站点Sitecore解决方案.所有站点共享一个产品范围,该产品范围存储在"共享数据"节点内,该节点与站点的根节点位于同一级别.站点上的各个产品页面使用通配符项根据URL的最后部分查找产品.
这意味着我们无法使用富文本编辑器中的内部链接指向任何站点上的产品页面,因为产品项目没有特定的站点URL.
有没有人知道克服这个问题的方法,或者知道一种增加内部链接默认行为的方法?
我需要实现这样一个功能.它需要工作,以便在您上次更改密码后x天,然后当您登录时收到一条消息,说明您的密码已过期,请输入新密码并确认新密码
您是否有任何想法/建议如何以正确的方式做到这一点?
当我使用该Task.WhenAll()函数并在Task中抛出异常时抛出新的AggregateException,我可以捕获它以查看Tasks中发生的所有异常.但是,当我使用时Task.WhenAny()没有抛出任何异常.相反,我必须检查Task.Exception属性值以查看是否发生了异常.这似乎是一个糟糕的代码味道,因为我必须记住Task.Exception每次使用时检查属性Task.WhenAny().难道不应该有更好的方法吗?
这是我的意思的一个例子:
private async void btnMultipleExceptions_Click(object sender, EventArgs e) {
var task1 = ThrowNotImplementedException();
var task2 = ThrowDivideByZeroException();
try {
Task task = await Task.WhenAny(task1, task2);
// Even if an exception is thrown in one of the tasks (in our case,
// task1 will throw first) no exception is thrown from
// the above await Task.WhenAny(). Instead, the exception is placed on the
// Task.Exception property. So I need to …Run Code Online (Sandbox Code Playgroud) 这个程序抛出ArrayIndexOutOfBoundException.
string name = "Naveen";
int c = 0;
while( name[ c ] != '\0' ) {
c++;
}
Console.WriteLine("Length of string " + name + " is: " + c);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如果字符串不以空值终止.如何在C#中处理字符串?如何在不使用string.Length财产的情况下获得长度?我在这里很困惑.!
我试图将CSS类添加到Sitecore 8中的Rich Text编辑器中。我在web.config中包括了对CSS文件的引用,如下所示
<settings>
<setting name="WebStylesheet">
<patch:attribute name="value">/Stylesheets/Corporate/rte.css</patch:attribute>
</setting>
</settings>
Run Code Online (Sandbox Code Playgroud)
我的CSS类如下所示:
.utility.background-color-dark-blue:focus, .utility.background-color-dark-blue:hover {
background-color: #034b76;
color: #fff;
}
.utility.background-color-dark-grey {
background-color: #1a1b1f;
color: #fff;
}
Run Code Online (Sandbox Code Playgroud)
当我从RTE的下拉列表中选择CSS类时,它仅将“ background-color-dark-grey”类应用于该元素。我需要将CSS类应用为“ utility background-color-dark-grey”,以显示正确的样式。
有谁知道如何在sitecore中向RTE添加多个类?
我有以下算法来找到两个集合的联合.
IEnumerable<IGroup> labelGroups = _agents.Where(x => settings.LabelIds.Contains(x.Id));
IEnumerable<Guid>labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
settings.AgentIds = new Collection<Guid>(labelAgentIds.Union(settings.AgentIds).ToList());
Run Code Online (Sandbox Code Playgroud)
要么
IEnumerable<IGroup> labelGroups = _agents.Where(x => settings.LabelIds.Contains(x.Id));
agentIds = labelGroups.Aggregate(agentIds, (current, label) => current.Union(label.AgentIds));
Run Code Online (Sandbox Code Playgroud)
我应该使用哪一个?帮我比较一下这个算法(速度和内存).
想象一下场景.
public enum SaveStates
{
Saved, //Represents a successful save.
SavedWithChanges, //Represents a successful save, where records were modified
SavedWithoutChanges //Represents a successful save, but no records were modified
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Saved如果是SavedWithChanges 或 ,则可以考虑枚举SavedWithoutChanges.
所以,如果我有一个像这样的变量:
SaveStates lastState = SaveStates.SavedWithoutChanges;
Run Code Online (Sandbox Code Playgroud)
我最好喜欢做这样的事情:
if (lastState == SaveStates.Saved)
{
//The state is saved, do something awesome.
}
Run Code Online (Sandbox Code Playgroud)
我当然可以这样做:
if (lastState == SaveStates.SavedWithChanges || lastState == SaveStates.SavedWithoutChanges)
{
...
Run Code Online (Sandbox Code Playgroud)
然而,这有点乏味,我不能假设另一个开发人员将了解如何正确使用枚举.
每个枚举都是必需的,因为可能存在一个实例,我们可能希望在保存的情况下执行某些特定操作,例如没有更改.
我对其他设计理念持开放态度.
我正在使用Entity Framework,我想知道以下代码之间是否有任何区别.第一个和第二个代码似乎通过Entidad.Nombre =="Empresa"过滤掉所有项目,最后一个代码似乎只获得Entidad.Nombre =="Empresa"的项目.我错了吗?什么是更好的?
var listFields = from b in unitOfWork.PropiedadRepository.Get()
where b.Entidad.Nombre == "Empresa"
select b;
var listFields2 = unitOfWork.PropiedadRepository.Get().Where(x => x.Entidad.Nombre == "Empresa");
var listFields3 = unitOfWork.PropiedadRepository.Get(x => x.Entidad.Nombre == "Empresa");
Run Code Online (Sandbox Code Playgroud)
这是GenericRepository类.所有存储库都继承了它.
public sealed class GenericRepository<TEntity> where TEntity : class
{
private readonly ConfigurationDbDataContext _context;
private readonly DbSet<TEntity> _dbSet;
public GenericRepository(ConfigurationDbDataContext context)
{
_context = context;
_dbSet = context.Set<TEntity>();
}
public IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{ …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
static int x2 = 10;
public static void Main()
{
short y = 10;
Console.WriteLine(y.Equals(x2)); //False
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
为何y.Equals(x2)回归false?
比较旧的错误处理方式和新的错误处理方式,通过使用异常过滤器,使用过滤器对我来说到底有什么好处,什么时候应该使用它?在什么情况下我可以很好地利用这个新功能?
我已经阅读了有关展开堆栈的信息,但仍然不明白我们无法以旧方式处理该问题的情况。请像我5岁一样解释一下。
try
{
Foo.DoSomethingThatMightFail(null);
}
catch (MyException ex) when (ex.Code == 42)
{
Console.WriteLine("Error 42 occurred");
}
Run Code Online (Sandbox Code Playgroud)
与
try
{
Foo.DoSomethingThatMightFail(null);
}
catch (MyException ex)
{
if (ex.Code == 42)
Console.WriteLine("Error 42 occurred");
else
throw;
}
Run Code Online (Sandbox Code Playgroud)
我知道这个问题还有其他版本,问题是,这个问题提到了我实际上找不到的好处,例如。
异常过滤器比捕获和重新抛出更可取,因为它们不会损害堆栈。如果异常后来导致堆栈被转储,您可以看到它最初来自哪里,而不仅仅是最后一次被重新抛出的位置。
经过一些测试后,我没有看到两者之间的区别,我仍然从重新抛出的地方看到异常。所以,或者信息没有得到确认,我不理解异常过滤器(这就是我问的原因),或者我做错了(如果我错了,也请纠正我)。
class specialException : Exception
{
public DateTime sentDateTime { get; } = DateTime.Now;
public int code { get; } = 0;
public string emailsToAlert { get; } = "email@domain.com";
}
Run Code Online (Sandbox Code Playgroud)
然后:
try
{
throw new specialException();
//throw new …Run Code Online (Sandbox Code Playgroud)