Esempio n. 1
0
 public void BuildRouteValueDictionaryWithNullExpressionThrowsArgumentNullException()
 {
     Assert.ThrowsArgumentNull(
         () => ExpressionHelper.GetRouteValuesFromExpression <TestController>(null),
         "action"
         );
 }
        public static string BuildUrlFromExpression <TController>(RequestContext context, RouteCollection routeCollection, Expression <Action <TController> > action) where TController : Controller
        {
            RouteValueDictionary routeValues = ExpressionHelper.GetRouteValuesFromExpression(action);
            VirtualPathData      vpd         = routeCollection.GetVirtualPathForArea(context, routeValues);

            return((vpd == null) ? null : vpd.VirtualPath);
        }
        private static string GetQueryStringArguments <TController>(HtmlHelper helper,
                                                                    Expression <Action <TController> > action, string linkText, string controllerUrlName, string actionName)
            where TController : Controller
        {
            RouteValueDictionary routingValues = ExpressionHelper.GetRouteValuesFromExpression <TController>(action);
            string routePortion = helper.RouteCollection.GetVirtualPath(helper.ViewContext.RequestContext, routingValues).VirtualPath;
            string controllerAndActionUrlPortion = controllerUrlName + "/" + actionName;

            // If there's a "?" in the querystring, then take everything from the "?"
            // and onwards as the parameters to the URL
            if (routePortion.IndexOf('?') > -1)
            {
                return(routePortion.Substring(routePortion.IndexOf('?')));
            }
            // If the controllerAndActionUrlPortion + "/" is found in the querystring, then it implies
            // that there are parameters, so take everything after the controllerAndActionUrlPortion,
            // including the "/"
            else if (routePortion.IndexOf(controllerAndActionUrlPortion + "/") > -1)
            {
                return(routePortion.Substring(routePortion.IndexOf(controllerAndActionUrlPortion + "/") +
                                              controllerAndActionUrlPortion.Length));
            }
            else
            {
                return("");
            }
        }
Esempio n. 4
0
        public static string BuildUrlFromExpression <TController>(RequestContext context, RouteCollection routeCollection, Expression <Action <TController> > action) where TController : Controller
        {
            var             routeInfo = ExpressionHelper.GetRouteInfoFromExpression(routeCollection, action);
            VirtualPathData vpd       = routeCollection.GetVirtualPathForArea(context, routeInfo.Key, routeInfo.Value);

            return((vpd == null) ? null : vpd.VirtualPath);
        }
Esempio n. 5
0
        protected void AssertRedirectedTo <TController>(ActionResult actionResult,
                                                        Expression <Action <TController> > action)
            where TController : Controller
        {
            RouteValueDictionary routeValues = ExpressionHelper.GetRouteValuesFromExpression(action);

            AssertRedirectedTo(actionResult, routeValues);
        }
        public MvcHtmlString RenderAction <TController>(Expression <Action <TController> > action) where TController : Controller
        {
            var helper = GetHtmlHelper();

            var routeValues = ExpressionHelper.GetRouteValuesFromExpression(action);

            return(helper.Action((string)routeValues["action"], (string)routeValues["controller"], routeValues));
        }
        public void BuildRouteValueDictionaryWithoutControllerSuffixThrowsInvalidOperationException()
        {
            // Arrange
            Expression <Action <TestControllerNot> > index = (c => c.Index(123));

            // Act & Assert
            ExceptionHelper.ExpectArgumentException(
                () => ExpressionHelper.GetRouteValuesFromExpression(index),
                "Controller name must end in 'Controller'." + Environment.NewLine + "Parameter name: action");
        }
        public void BuildRouteValueDictionary_TargetsNonActionMethod_Throws()
        {
            // Arrange
            Expression <Action <TestController> > expr = (c => c.NotAnAction());

            // Act & assert
            Assert.Throws <InvalidOperationException>(
                delegate { ExpressionHelper.GetRouteValuesFromExpression(expr); },
                @"The method 'NotAnAction' is marked [NonAction] and cannot be called directly.");
        }
        public void BuildRouteValueDictionary_TargetsAsynchronousCompletedMethod_Throws()
        {
            // Arrange
            Expression <Action <TestAsyncController> > expr = (c => c.AsynchronousCompleted());

            // Act & assert
            Assert.Throws <InvalidOperationException>(
                delegate { ExpressionHelper.GetRouteValuesFromExpression(expr); },
                @"The method 'AsynchronousCompleted' is an asynchronous completion method and cannot be called directly.");
        }
Esempio n. 10
0
        public void BuildRouteValueDictionaryWithControllerBaseClassThrowsInvalidOperationException()
        {
            // Arrange
            Expression <Action <Controller> > index = (c => c.Dispose());

            // Act & Assert
            ExceptionHelper.ExpectArgumentException(
                () => ExpressionHelper.GetRouteValuesFromExpression(index),
                "Cannot route to class named 'Controller'." + Environment.NewLine + "Parameter name: action");
        }
Esempio n. 11
0
        public void BuildRouteValueDictionaryWithNonMethodExpressionThrowsInvalidOperationException()
        {
            // Arrange
            Expression <Action <TestController> > expression = c => new TestController();

            // Act & Assert
            ExceptionHelper.ExpectArgumentException(
                () => ExpressionHelper.GetRouteValuesFromExpression <TestController>(expression),
                "Expression must be a method call." + Environment.NewLine + "Parameter name: action");
        }
Esempio n. 12
0
        public void GetInputNameFromPropertyExpressionReturnsPropertyName()
        {
            // Arrange
            Expression <Func <TestModel, int> > expression = m => m.IntProperty;

            // Act
            string name = ExpressionHelper.GetInputName(expression);

            // Assert
            Assert.AreEqual("IntProperty", name);
        }
Esempio n. 13
0
        public void GetInputNameFromPropertyWithTwoMethodCallExpressionReturnsPropertyName()
        {
            // Arrange
            Expression <Func <TestModel, string> > expression = m => m.IntProperty.ToString().ToUpper();

            // Act
            string name = ExpressionHelper.GetInputName(expression);

            // Assert
            Assert.AreEqual("IntProperty", name);
        }
Esempio n. 14
0
        public void GetInputNameFromExpressionWithTwoPropertiesUsesWholeExpression()
        {
            // Arrange
            Expression <Func <TestModel, int> > expression = m => m.StringProperty.Length;

            // Act
            string name = ExpressionHelper.GetInputName(expression);

            // Assert
            Assert.AreEqual("StringProperty.Length", name);
        }
Esempio n. 15
0
        public static string Action <TController>(this UrlHelper url, Expression <Action <TController> > action) where TController : Controller
        {
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }

            RouteValueDictionary routeValues = ExpressionHelper.GetRouteValuesFromExpression(action);

            return(url.RouteUrl(routeValues));
        }
Esempio n. 16
0
        public static RedirectToRouteResult RedirectToAction <TController>(this Controller controller, Expression <Action <TController> > action) where TController : Controller
        {
            if (controller == null)
            {
                throw new ArgumentNullException("controller");
            }

            var routeInfo = ExpressionHelper.GetRouteInfoFromExpression(RouteTable.Routes, action);

            return(new RedirectToRouteResult(routeInfo.Key, routeInfo.Value));
        }
Esempio n. 17
0
        public static RedirectToRouteResult RedirectToAction <TController>(this Controller controller, Expression <Action <TController> > action) where TController : Controller
        {
            if (controller == null)
            {
                throw new ArgumentNullException("controller");
            }

            RouteValueDictionary routeValues = ExpressionHelper.GetRouteValuesFromExpression(action);

            return(new RedirectToRouteResult(routeValues));
        }
Esempio n. 18
0
        public void BuildRouteValueDictionaryAddsControllerNameToDictionary()
        {
            // Arrange
            Expression <Action <TestController> > index = (c => c.Index(123));

            // Act
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(index);

            // Assert
            Assert.AreEqual("Test", rvd["Controller"]);
        }
Esempio n. 19
0
        public void BuildRouteValueDictionaryFromExpressionReturnsCorrectDictionary()
        {
            // Arrange
            Expression <Action <TestController> > index = (c => c.Index(123));

            // Act
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(index);

            // Assert
            Assert.AreEqual("Test", rvd["Controller"]);
            Assert.AreEqual("Index", rvd["Action"]);
            Assert.AreEqual(123, rvd["page"]);
        }
Esempio n. 20
0
        public void BuildRouteValueDictionary_TargetsSynchronousMethodOnAsyncController_ReturnsOriginalName()
        {
            // Arrange
            Expression <Action <TestAsyncController> > expr = (c => c.Synchronous());

            // Act
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(expr);

            // Assert
            Assert.AreEqual("Synchronous", rvd["action"]);
            Assert.AreEqual("TestAsync", rvd["controller"]);
            Assert.IsFalse(rvd.ContainsKey("area"));
        }
Esempio n. 21
0
        public void BuildRouteValueDictionaryFromNonConstantExpressionReturnsCorrectDictionary()
        {
            // Arrange
            Expression <Action <TestController> > index = (c => c.About(Foo));

            // Act
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(index);

            // Assert
            Assert.AreEqual("Test", rvd["Controller"]);
            Assert.AreEqual("About", rvd["Action"]);
            Assert.AreEqual("FooValue", rvd["s"]);
        }
Esempio n. 22
0
        public void BuildRouteValueDictionary_TargetsAsynchronousAsyncMethod_StripsSuffix()
        {
            // Arrange
            Expression <Action <TestAsyncController> > expr = (c => c.AsynchronousAsync());

            // Act
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(expr);

            // Assert
            Assert.AreEqual("Asynchronous", rvd["action"]);
            Assert.AreEqual("TestAsync", rvd["controller"]);
            Assert.IsFalse(rvd.ContainsKey("area"));
        }
Esempio n. 23
0
        public void BuildRouteValueDictionary_TargetsRenamedMethod_UsesNewName()
        {
            // Arrange
            Expression <Action <TestController> > expr = (c => c.Renamed());

            // Act
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(expr);

            // Assert
            Assert.AreEqual("NewName", rvd["action"]);
            Assert.AreEqual("Test", rvd["controller"]);
            Assert.IsFalse(rvd.ContainsKey("area"));
        }
        private static RouteValueDictionary PrepareRvd <TController>(HtmlHelper helper, Expression <Action <TController> > action) where TController : Controller
        {
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(action);

            foreach (var entry in helper.ViewContext.RouteData.Values)
            {
                if (!rvd.ContainsKey(entry.Key))
                {
                    rvd.Add(entry.Key, entry.Value);
                }
            }
            return(rvd);
        }
Esempio n. 25
0
        public void BuildRouteValueDictionary_TargetsControllerWithAreaAttribute_AddsAreaName()
        {
            // Arrange
            Expression <Action <ControllerWithAreaController> > expr = c => c.Index();

            // Act
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(expr);

            // Assert
            Assert.AreEqual("Index", rvd["action"]);
            Assert.AreEqual("ControllerWithArea", rvd["controller"]);
            Assert.AreEqual("the area name", rvd["area"]);
        }
Esempio n. 26
0
        public static void RenderAction <TController>(this HtmlHelper helper, Expression <Action <TController> > action) where TController : Controller
        {
            RouteValueDictionary rvd = ExpressionHelper.GetRouteValuesFromExpression(action);

            foreach (var entry in helper.ViewContext.RouteData.Values)
            {
                if (!rvd.ContainsKey(entry.Key))
                {
                    rvd.Add(entry.Key, entry.Value);
                }
            }

            RenderRoute(helper, rvd);
        }
Esempio n. 27
0
        public static MvcHtmlString ActionLink <TController>(
            this HtmlHelper helper,
            Expression <Action <TController> > action,
            string linkText,
            object htmlAttributes
            ) where TController : Controller
        {
            RouteValueDictionary routingValues = ExpressionHelper.GetRouteValuesFromExpression(
                action
                );

            return(helper.RouteLink(
                       linkText,
                       routingValues,
                       HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
                       ));
        }
        // todo: Move to a Seleno.Mvc project if established
        public TPage To <TController, TPage>(Expression <Action <TController> > action, IDictionary <string, object> routeValues = null)
            where TController : Controller
            where TPage : UiComponent, new()
        {
            var requestContext = new RequestContext(FakeHttpContext.Root(), new RouteData());

            var actionRouteValues = ExpressionHelper.GetRouteValuesFromExpression(action);

            if (routeValues != null)
            {
                foreach (var v in routeValues)
                {
                    actionRouteValues[v.Key] = v.Value;
                }
            }

            var urlHelper   = new UrlHelper(requestContext, _routeCollection);
            var relativeUrl = urlHelper.RouteUrl(new RouteValueDictionary(actionRouteValues));

            return(To <TPage>(relativeUrl));
        }
Esempio n. 29
0
        public MenuItem Action <TController>(Expression <Action <TController> > expression) where TController : System.Web.Mvc.Controller
        {
            var valuesFromExpression = ExpressionHelper.GetRouteValuesFromExpression(expression);

            this.ControllerName = (string)valuesFromExpression["Controller"];
            this.ActionName     = (string)valuesFromExpression["Action"];
            this.Area           = (string)valuesFromExpression["Area"];

            var call = ((MethodCallExpression)expression.Body).Method;

            var allowAnonymousAttribute = (AllowAnonymousAttribute)call.GetCustomAttributes(typeof(AllowAnonymousAttribute), true).FirstOrDefault();

            this.AllowAnonymous = allowAnonymousAttribute != null;

            if (!this.AllowAnonymous)
            {
                var authorizeAttributes = call.GetCustomAttributes(typeof(AuthorizeAttribute), true).Cast <AuthorizeAttribute>().ToArray();
                if (authorizeAttributes.Length == 0)
                {
                    if (call.DeclaringType != null)
                    {
                        authorizeAttributes = call.DeclaringType.GetCustomAttributes(typeof(AuthorizeAttribute), true).Cast <AuthorizeAttribute>().ToArray();
                    }

                    if (authorizeAttributes.Length == 0)
                    {
                        authorizeAttributes = GlobalFilters.Filters.Where(filter => filter.Instance is AuthorizeAttribute).Select(filter => filter.Instance).Cast <AuthorizeAttribute>().ToArray();
                    }
                }

                if (authorizeAttributes.Length == 0)
                {
                    this.AllowAnonymous = true;
                }
                else
                {
                    var roles = new List <string>();
                    foreach (var authorizeAttribute in authorizeAttributes)
                    {
                        if (!string.IsNullOrWhiteSpace(authorizeAttribute.Roles))
                        {
                            var newRoles = authorizeAttribute.Roles.Split(',');
                            roles.AddRange(newRoles);
                        }
                    }

                    this.Roles = roles.Select(role => role.Trim()).ToArray();
                }
            }

            if (!this.IsDivider && !this.IsHeader && string.IsNullOrEmpty(this.Text))
            {
                if (this.ActionName.ToLowerInvariant().Equals("index"))
                {
                    this.Text = this.ControllerName;
                }
                else if (this.ControllerName.ToLowerInvariant().Equals("home"))
                {
                    this.Text = this.ActionName;
                }
                else
                {
                    this.Text = this.ActionName + " " + this.ControllerName;
                }
            }

            return(this);
        }
Esempio n. 30
0
 protected string GetUrl <TController>(Expression <Action <TController> > action) where TController : Controller
 {
     return(GetUrl(ExpressionHelper.GetRouteValuesFromExpression(action)));
 }