Похоже, что он жестко закодирован в веб-части.
Я посмотрел на Microsoft.SharePoint.Portal.WebControls.SocialCommentControl и ссылка взята с UserProfile.PublicUrl , который определяется как:
public override Uri PublicUrl
{
get
{
string userProfileUrl = UserProfileGlobal.GetUserProfileURL(
this.m_objManager.UserProfileApplicationProxy,
this.m_objManager.PartitionID,
"?accountname=",
this.m_UserProfileFields["AccountName"].ToString());
if (!string.IsNullOrEmpty(userProfileUrl))
return new Uri(userProfileUrl);
else
return (Uri) null;
}
}
, который в конечном итоге вызывает:
internal static string GetUserProfileURL(string profileWebUrl, string strIdentifier, string strValue)
{
if (string.IsNullOrEmpty(profileWebUrl))
return (string) null;
else
return PersonalSpaceGlobal.EnsureTrailingSlash(profileWebUrl)
+ "Person.aspx"
+ strIdentifier
+ (strIdentifier.Equals("?accountname=", StringComparison.OrdinalIgnoreCase)
? SPHttpUtility.UrlKeyValueEncode(strValue).Replace(":", "%3A")
: SPHttpUtility.UrlKeyValueEncode(strValue));
}
Я могу придумать два обходных пути:
- Добавьте jQuery на свою страницу, чтобы изменить URL-адрес (selector = span.socialcomment-username> a)
- Создайте собственную веб-часть, содержащую пользовательский элемент управления, наследуемый от SocialCommentControl, который переопределяет RenderComment .
Переопределение RenderComment, вероятно, будет грязным.Вам нужно будет скопировать декомпилированный код для метода, чтобы просто изменить следующее в свой собственный код:
SocialCommentControl._GetProperty(
comment,
SocialCommentControl.SocialCommentProperty.PublicPage)
Надеемся, что в 67 строках кода RenderComment нет внутренних вызовов методов,Иначе это будет намного сложнее реализовать.Было бы намного проще, если бы вы могли просто переопределить _GetProperty , но, к сожалению, это статический метод.
Все это говорит о том, что я, вероятно, рекомендовал бы вариант jQuery вместо расширения SocialCommentControl.