Example #1
0
        private static MvcHtmlString ActionLinkFormContent(HtmlHelper htmlHelper, string linkText, HttpVerbs actionVerb, IDictionary <string, object> htmlAttributes, string confMsg)
        {
            var result = new StringBuilder();

            //HttpMethodOverride
            switch (actionVerb)
            {
            case HttpVerbs.Delete:
            case HttpVerbs.Head:
            case HttpVerbs.Put:
                result.AppendLine(htmlHelper.HttpMethodOverride(actionVerb).ToHtmlString());
                break;

            case HttpVerbs.Post:
                break;

            case HttpVerbs.Get:
                throw new SupermodelException("HttpVerbs.Get is not supported in ActionLinkFormContent");
            }

            //submit
            var aTag = new TagBuilder("input");

            aTag.MergeAttribute("link", "");
            aTag.MergeAttribute("type", "submit");
            aTag.MergeAttribute("Value", linkText);
            aTag.MergeAttributes(htmlAttributes);
            if (confMsg != null)
            {
                aTag.MergeAttribute("data-sm-ConfirmMsg", confMsg);
            }
            result.AppendLine(aTag.ToString());

            return(MvcHtmlString.Create(result.ToString()));
        }
Example #2
0
        /// <summary>
        /// Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an actionName method.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="model">The model to built form for.</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns>An opening &lt;form&gt; tag. </returns>
        public static MvcForm BeginResourceForm <TModel>(this HtmlHelper <TModel> htmlHelper, IDictionary <string, object> htmlAttributes)
            where TModel : IEntity
        {
            RouteNames routeNames = htmlHelper.ViewContext.HttpContext.Request.GetRouteNames();
            UrlHelper  url        = new UrlHelper(htmlHelper.ViewContext.RequestContext);

            string actionName       = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
            bool   isNewAction      = actionName.Equals(routeNames.NewName, StringComparison.InvariantCultureIgnoreCase);
            string targetActionName = isNewAction ? routeNames.CreateName : routeNames.UpdateName;
            string formName         = htmlHelper.ViewData.Model.GetType().Name.ToLower();
            string formId           = string.Format("{0}_{1}", targetActionName, formName);
            string formAction       = url.Action(targetActionName, htmlHelper.ViewContext.RequestContext.RouteData.Values);


            TagBuilder tagBuilder = new TagBuilder("form");

            tagBuilder.MergeAttributes <string, object>(htmlAttributes);
            tagBuilder.MergeAttribute("id", formId);
            tagBuilder.MergeAttribute("name", formName);
            tagBuilder.MergeAttribute("action", formAction);
            tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(FormMethod.Post));
            htmlHelper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag));

            if (!isNewAction)
            {
                htmlHelper.ViewContext.Writer.Write(htmlHelper.HttpMethodOverride(HttpVerbs.Put).ToHtmlString());
            }

            htmlHelper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag));

            return(new MvcForm(htmlHelper.ViewContext));
        }
Example #3
0
        public static MvcHtmlString DeleteLink(
            this HtmlHelper helper,
            string actionName,
            string controllerName,
            object routeValues,
            object htmlAttributes)
        {
            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
            var url       = urlHelper.Action(actionName, controllerName, routeValues);

            var form = new TagBuilder("form");

            form.Attributes.Add("action", url);
            form.Attributes.Add("method", "post");
            form.Attributes.Add("style", "display:inline");

            var formControls = helper.HttpMethodOverride(HttpVerbs.Delete).ToString();

            var submit = new TagBuilder("input");

            submit.Attributes.Add("type", "Submit");
            submit.Attributes.Add("value", "Delete");

            if (htmlAttributes != null)
            {
                submit.MergeAttributes(new RouteValueDictionary(htmlAttributes));
            }

            formControls  += submit.ToString();
            form.InnerHtml = formControls;

            return(MvcHtmlString.Create(form.ToString()));
        }
Example #4
0
 /// <summary>
 /// Emits a hidden form variable for X-Http-Method-Override. The only valid values for actionType
 /// are ActionType.Delete and ActionType.Update
 /// </summary>
 /// <param name="html"></param>
 /// <param name="actionType"></param>
 /// <returns></returns>
 public static MvcHtmlString HttpMethodOverride(this HtmlHelper html, ActionType actionType)
 {
     if (actionType != ActionType.Delete && actionType != ActionType.Update)
     {
         throw new ArgumentOutOfRangeException("actionType");
     }
     return(html.HttpMethodOverride(actionType == ActionType.Delete ? "DELETE" : "PUT"));
 }
Example #5
0
        public void HttpMethodOverrideWithVerbRendersHiddenField()
        {
            // Arrange
            HtmlHelper htmlHelper = new HtmlHelper(new Mock <ViewContext>().Object, MvcHelper.GetViewDataContainer(null), new RouteCollection());;

            // Act
            MvcHtmlString hiddenField = htmlHelper.HttpMethodOverride(HttpVerbs.Delete);

            // Assert
            Assert.AreEqual <string>(@"<input name=""X-HTTP-Method-Override"" type=""hidden"" value=""DELETE"" />", hiddenField.ToHtmlString());
        }
Example #6
0
        public void HttpMethodOverrideWithNullThrowsException()
        {
            // Arrange
            HtmlHelper htmlHelper = new HtmlHelper(new Mock <ViewContext>().Object, MvcHelper.GetViewDataContainer(null), new RouteCollection());;

            // Act & Assert
            ExceptionHelper.ExpectArgumentExceptionNullOrEmpty(
                delegate {
                htmlHelper.HttpMethodOverride(null);
            },
                "httpMethod");
        }
Example #7
0
        public void HttpMethodOverrideWithMethodRendersHiddenField()
        {
            // Arrange
            var viewContext       = new Mock <ViewContext>().Object;
            var viewDataContainer = MvcHelper.GetViewDataContainer(null);
            var htmlHelper        = new HtmlHelper(viewContext, viewDataContainer);

            // Act
            MvcHtmlString hiddenField = htmlHelper.HttpMethodOverride("PUT");

            // Assert
            Assert.AreEqual <string>(@"<input name=""X-HTTP-Method-Override"" type=""hidden"" value=""PUT"" />", hiddenField.ToHtmlString());
        }
        /// <summary>
        /// Provides a link to use the new HttpMethodOverride to implement a delete verb.
        /// </summary>
        /// <param name="helper"></param>
        /// <param name="actionName"></param>
        /// <param name="controllerName"></param>
        /// <param name="routeValues"></param>
        /// <param name="imageUrlPath"></param>
        /// <returns></returns>
        /// <example>
        /// <%=Html.DeleteLink("Delete", "Workouts", new { id = workout.Id }, "/images/remove-icon.png") %>
        /// </example>
        public static MvcHtmlString DeleteLink(this HtmlHelper helper, string actionName, string controllerName, object routeValues, string imageUrlPath)
        {
            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
            var url       = urlHelper.Action(actionName, controllerName, routeValues);

            var formTag = new TagBuilder("form");

            formTag.MergeAttribute("action", url);
            formTag.MergeAttribute("method", "post");
            var inputTag = new TagBuilder("input");

            inputTag.MergeAttribute("type", "image");
            inputTag.MergeAttribute("src", imageUrlPath);
            inputTag.MergeAttribute("alt", "Delete");

            formTag.InnerHtml = inputTag.ToString(TagRenderMode.SelfClosing) + helper.HttpMethodOverride(HttpVerbs.Delete);

            return(MvcHtmlString.Create(formTag.ToString()));
        }
Example #9
0
        public void HttpMethodOverrideGuardClauses()
        {
            // Arrange
            var viewContext       = new Mock <ViewContext>().Object;
            var viewDataContainer = MvcHelper.GetViewDataContainer(null);
            var htmlHelper        = new HtmlHelper(viewContext, viewDataContainer);

            // Act & Assert
            ExceptionHelper.ExpectArgumentExceptionNullOrEmpty(
                () => htmlHelper.HttpMethodOverride(null),
                "httpMethod"
                );
            ExceptionHelper.ExpectArgumentException(
                () => htmlHelper.HttpMethodOverride((HttpVerbs)10000),
                @"The specified HttpVerbs value is not supported. The supported values are Delete, Head, and Put.
Parameter name: httpVerb"
                );
            ExceptionHelper.ExpectArgumentException(
                () => htmlHelper.HttpMethodOverride(HttpVerbs.Get),
                @"The specified HttpVerbs value is not supported. The supported values are Delete, Head, and Put.
Parameter name: httpVerb"
                );
            ExceptionHelper.ExpectArgumentException(
                () => htmlHelper.HttpMethodOverride(HttpVerbs.Post),
                @"The specified HttpVerbs value is not supported. The supported values are Delete, Head, and Put.
Parameter name: httpVerb"
                );
            ExceptionHelper.ExpectArgumentException(
                () => htmlHelper.HttpMethodOverride("gEt"),
                @"The GET and POST HTTP methods are not supported.
Parameter name: httpMethod"
                );
            ExceptionHelper.ExpectArgumentException(
                () => htmlHelper.HttpMethodOverride("pOsT"),
                @"The GET and POST HTTP methods are not supported.
Parameter name: httpMethod"
                );
        }
Example #10
0
        public void HttpMethodOverrideWithVerbRendersHiddenField()
        {
            // Arrange
            var viewContext = new Mock<ViewContext>().Object;
            var viewDataContainer = MvcHelper.GetViewDataContainer(null);
            var htmlHelper = new HtmlHelper(viewContext, viewDataContainer);

            // Act
            MvcHtmlString hiddenField = htmlHelper.HttpMethodOverride(HttpVerbs.Delete);

            // Assert
            Assert.Equal(@"<input name=""X-HTTP-Method-Override"" type=""hidden"" value=""DELETE"" />", hiddenField.ToHtmlString());
        }
Example #11
0
        public void HttpMethodOverrideGuardClauses()
        {
            // Arrange
            var viewContext = new Mock<ViewContext>().Object;
            var viewDataContainer = MvcHelper.GetViewDataContainer(null);
            var htmlHelper = new HtmlHelper(viewContext, viewDataContainer);

            // Act & Assert
            Assert.ThrowsArgumentNullOrEmpty(
                () => htmlHelper.HttpMethodOverride(null),
                "httpMethod"
                );
            Assert.Throws<ArgumentException>(
                () => htmlHelper.HttpMethodOverride((HttpVerbs)10000),
                "The specified HttpVerbs value is not supported. The supported values are Delete, Head, Put, Options, and Patch." + Environment.NewLine
              + "Parameter name: httpVerb"
                );
            Assert.Throws<ArgumentException>(
                () => htmlHelper.HttpMethodOverride(HttpVerbs.Get),
                "The specified HttpVerbs value is not supported. The supported values are Delete, Head, Put, Options, and Patch." + Environment.NewLine
              + "Parameter name: httpVerb"
                );
            Assert.Throws<ArgumentException>(
                () => htmlHelper.HttpMethodOverride(HttpVerbs.Post),
                "The specified HttpVerbs value is not supported. The supported values are Delete, Head, Put, Options, and Patch." + Environment.NewLine
              + "Parameter name: httpVerb"
                );
            Assert.Throws<ArgumentException>(
                () => htmlHelper.HttpMethodOverride("gEt"),
                "The GET and POST HTTP methods are not supported." + Environment.NewLine
              + "Parameter name: httpMethod"
                );
            Assert.Throws<ArgumentException>(
                () => htmlHelper.HttpMethodOverride("pOsT"),
                "The GET and POST HTTP methods are not supported." + Environment.NewLine
              + "Parameter name: httpMethod"
                );
        }
Example #12
0
 public MvcHtmlString HttpMethodOverride(string httpVerb) => HtmlHelper.HttpMethodOverride(httpVerb);