by WebSurfer
31. July 2013 12:20
久々の BlogEngine.NET 2.0 の不具合修正の話です。

「アーカイブ」のページには、上の画像(IE9 とその開発者ツールを重ねて表示)のようにページの上部にハイパーリンク(html の a 要素)でメニューが表示され、これをクリックすると同じページ内の一覧のヘッダまでスクロールするようになっています。
その仕掛けは、上の画像の開発者ツールの html コードを見てください。例えば、メニューの a 要素で href="#cat-AKB48" と設定し、一覧のヘッダの h2 要素で id="cat-AKB48" と設定されているのが分かるでしょうか。
上の画像の html コードは修正後のものなので a 要素の href も h2 要素の id も正しく設定されていますが、修正前は a 要素の href が "#AKB48" となっていた(cat- がない)という不具合がありました。
それを以下のように cat- を追加するようにして修正しました。
archive.aspx.cs の AddCategoryToMenu メソッド
public partial class archive :
BlogEngine.Core.Web.Controls.BlogBasePage
{
// ・・・中略・・・
private void AddCategoryToMenu(string title)
{
HtmlAnchor a = new HtmlAnchor();
a.InnerHtml = Server.HtmlEncode(title);
// 2013/7/31 修正
// バージョン 2.0 の CreateRowHeader メソッドで、
//
// h2.Attributes["id"] =
// "cat-" + Utils.RemoveIllegalCharacters(name);
//
// と cat- をカテゴリー名の頭に追加したにもかかわらず、
// ここでは cat- を追加してないので、メニューをクリック
// しても動かないという不具合あり。以下のように修正:
//
// a.HRef = "#" + Utils.RemoveIllegalCharacters(title);
// ↓
a.HRef = "#cat-" + Utils.RemoveIllegalCharacters(title);
a.Attributes.Add("rel", "directory");
HtmlGenericControl li = new HtmlGenericControl("li");
li.Controls.Add(a);
ulMenu.Controls.Add(li);
}
// ・・・中略・・・
}