Looking for a Html.SubmitButton helper that would accept class attributes in MVC3

后端 未结 6 1280
野性不改
野性不改 2020-12-31 08:42

I would like to use a helper for Submit button in MVC3. Is such a thing available? If not, then does anyone know where I could get some code for this. I would like one that

相关标签:
6条回答
  • 2020-12-31 08:53

    There isn't a HTML helper for a button because the HTML helpers reflect over a model's propertys and help you by setting the correct attributes for binding purposes, they also look at the VilidationAttribute metadata for that property (if any) and add any jQuery validation attributes.

    Buttons are not part of the model and so do not have any helpers.

    You can crate your own HTML helper by following this article http://www.asp.net/mvc/overview/older-versions-1/views/creating-custom-html-helpers-cs or using the TagBuilder class: http://www.asp.net/mvc/overview/older-versions-1/views/using-the-tagbuilder-class-to-build-html-helpers-cs but I prefer to return HTMLString than a string

    0 讨论(0)
  • 2020-12-31 08:55

    Isn't it simple just to write

    <input type="submit" class="myclassname"/>

    In MVC, there are no such things like controls, that carry much application logic. In fact, it is possible but not recommended. What i want to say is that Html helpers are just making Html writing more comfortable and help you not write duplicate code. In your particular case, i think it is simpler to write direct html than that with helper. But anyways, if you want to, it is contained in MVC Futures Library. Method is called SubmitButton

    0 讨论(0)
  • 2020-12-31 09:05

    chk this link out it tells you how to create custom helper method, and there is no builtin submit helper ...

    http://stephenwalther.com/blog/archive/2009/03/03/chapter-6-understanding-html-helpers.aspx

    and it also include a very basic Submit helper method, hope it helps

    0 讨论(0)
  • 2020-12-31 09:08

    There isn't one but that shouldn't stop you from building one yourself.

    Even though the MVC futures project doesn't appear to be moving forward at all or supported, it's not too hard to download the source, and grab the Submit button helper (and it's supporting code) to roll your own.

    It's exactly how we created the base of our SubmitButton helper for a large MVC 4 project.

    0 讨论(0)
  • 2020-12-31 09:10

    Just add to your project class with such code:

    using System.Text;
    
    namespace System.Web.Mvc
    {
    public static class CustomHtmlHelper
    {
        public static MvcHtmlString SubmitButton(this HtmlHelper helper, string buttonText, object htmlAttributes = null)
        {
            StringBuilder html = new StringBuilder();
            html.AppendFormat("<input type = 'submit' value = '{0}' ", buttonText);
            //{ class = btn btn-default, id = create-button }
            var attributes = helper.AttributeEncode(htmlAttributes);
            if (!string.IsNullOrEmpty(attributes))
            {
                attributes = attributes.Trim('{', '}');
                var attrValuePairs = attributes.Split(',');
                foreach (var attrValuePair in attrValuePairs)
                {
                    var equalIndex = attrValuePair.IndexOf('=');
                    var attrValue = attrValuePair.Split('=');
                    html.AppendFormat("{0}='{1}' ", attrValuePair.Substring(0, equalIndex).Trim(), attrValuePair.Substring(equalIndex + 1).Trim());
                }
            }
            html.Append("/>");
            return new MvcHtmlString(html.ToString());
        }
    }
    }
    

    And usage example:

    @Html.SubmitButton("Save", new { @class= "btn btn-default", id="create-button" })
    
    0 讨论(0)
  • 2020-12-31 09:14

    Here is how I did it.

    Speaking of HTML 5 <button> attribute

    Create a PartialView - call it like _HTML5Button.vbhtml

    @ModelType YourProjectName.ButtonViewModel
    
    <button onclick="location.href = '@Model.URL'" class="btn btn-info">@Model.ButtonText</button>
    

    And create a ButtonViewModel

    Public Class ButtonViewModel
    
    Public URL As String
    Public ButtonText As String = "Modify Button Text"
    'You can add more parameters or do as you please
    
    End Class
    

    Then as you need to create it call you partial like this

    @Html.Partial("~/Views/Shared/MiniPartialViews/_HTML5Button.vbhtml", New ButtonViewModel With {.URL = "http://www.goanywhere.com", .ButtonText = "Name That Will Appear On The Button"})
    

    That way if you want to add more parameters later - it is all in that one partial view centralized for you - lets say you want to add an id later on

    Well you go to you partial, add an id="@Model.Id" so then in your PartialView Call you just add that parameter - it does not break anything - if you ever need to add a class to that button - add it - in one place rather than searching for all the calls.

    Hope that helps - it works super well for me!

    0 讨论(0)
提交回复
热议问题