1

Web サイトには MVCSiteMapProvider を使用しています。

シナリオは次のとおりです... 従業員のページを想像してください/employee/123123これには、従業員の詳細と、URL で維持する必要がある一連のリンクが含まれます。

一部のリンクは従来の URL を指す必要があるため、 のようなものが該当します/demographics/?employeeID=123。これらのリンクは約 30 個あるため、サイトマップでこれらを維持することが不可欠です。

これにアプローチする方法についての提案は役に立ちます。

4

1 に答える 1

1

このシナリオを処理する DynamicNodeProvider を作成できます。ループするときに「関連する」ノードを追加するだけで、すべてのノードがグループ化されて表示されます。ID は RouteValues に保存され、すべてのユーザーに対してキャッシュされるため、サイトマップはリクエスト間で ID を忘れません。

public class EmployeeDynamicNodeProvider
    : DynamicNodeProviderBase
{
    CRUDExample db = new CRUDExample();

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
    {
        var result = new List<DynamicNode>();

        var employees = db.Employee;
        foreach (var employee in employees)
        {
            var employeeKey = "Product_" + employee.Id.ToString();

            // Create the "Details" node for the employee
            var employeeNode = new DynamicNode(employeeKey, "EmployeeParentNodeKey", employee.Name, employee.Name, "Employee", "Details");

            // Set the "id" route value so the match will work.
            employeeNode.RouteValues.Add("id", employee.Id);

            // Add the node to the result
            result.Add(employeeNode);


            // Create the "Edit" node for the employee
            var employeeEditNode = new DynamicNode("EmployeeEdit_" + employee.Id.ToString(), employeeKey, "Edit", "Edit", "Employee", "Edit");

            // Set the "id" route value of the edit node
            employeeEditNode.RouteValues.Add("id", employee.Id);

            // Add the node to the result
            result.Add(employeeEditNode);


            // Create the "Delete" node for the employee
            var employeeDeleteNode = new DynamicNode("EmployeeDelete_" + employee.Id.ToString(), employeeKey, "Delete", "Delete", "Employee", "Delete");

            // Set the "id" route value of the delete node
            employeeDeleteNode.RouteValues.Add("id", employee.Id);

            // Add the node to the result
            result.Add(employeeDeleteNode);


            // Create the "Demographics" node for the employee
            var employeeDemographicsNode = new DynamicNode("EmployeeDemographics_" + employee.Id.ToString(), employeeKey, "Demographics", "Demographics", "Employee", "Demographics");

            // Set the "id" route value of the delete node
            employeeDemographicsNode.RouteValues.Add("id", employee.Id);

            // Add the node to the result
            result.Add(employeeDemographicsNode);
        }

        return result;
    }
}

URL に関しては、ルート値を URL に変換するのは System.Web.Routing です。ただし、URL が複雑な場合は、他にもいくつかのオプションがあります。

  1. ルート値ではなく、サイトマップ ノードの Url プロパティを使用します。
  2. URL の特殊なケースを処理するカスタム URL リゾルバーを作成します。
于 2013-08-20T22:36:26.947 に答える