From 53d60159f993c46acc6bf70a3375ef22dbce5338 Mon Sep 17 00:00:00 2001 From: NTaylorMullen Date: Sun, 25 Jan 2015 18:22:28 -0800 Subject: [PATCH] Add order property to control TagHelper execution order. - Added order property to the ITagHelper class. Lower values indicates higher execution priority. #94 --- src/Microsoft.AspNet.Razor.Runtime/TagHelpers/ITagHelper.cs | 6 ++++++ src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelper.cs | 4 ++++ .../TagHelpers/TagHelperRunner.cs | 4 +++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/ITagHelper.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/ITagHelper.cs index 1b716db0a1..51a9265b38 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/ITagHelper.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/ITagHelper.cs @@ -10,6 +10,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// public interface ITagHelper { + /// + /// Gets the execution order of this relative to others targeting the same element. + /// instances with lower values are executed first. + /// + int Order { get; } + /// /// Asynchronously executes the with the given and /// . diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelper.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelper.cs index 565343e020..2f26c482bd 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelper.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelper.cs @@ -10,6 +10,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// public abstract class TagHelper : ITagHelper { + /// + /// Default order is 0. + public virtual int Order { get; } = 0; + /// /// Synchronously executes the with the given and /// . diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs index 8da31ff45f..add873c256 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Linq; using System.Threading.Tasks; namespace Microsoft.AspNet.Razor.Runtime.TagHelpers @@ -24,8 +25,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers executionContext.UniqueId, executionContext.GetChildContentAsync); var tagHelperOutput = new TagHelperOutput(executionContext.TagName, executionContext.HTMLAttributes); + var orderedTagHelpers = executionContext.TagHelpers.OrderBy(tagHelper => tagHelper.Order); - foreach (var tagHelper in executionContext.TagHelpers) + foreach (var tagHelper in orderedTagHelpers) { await tagHelper.ProcessAsync(tagHelperContext, tagHelperOutput); }