0

I am trying to reuse html helper found here

public static class HtmlHelperExtension
{
    public static string DatePickerDropDowns(this HtmlHelper html, string dayName, string monthName, string yearName)
    {
        var daysList = new TagBuilder("select");
        var monthsList = new TagBuilder("select");
        var yearsList = new TagBuilder("select");

        daysList.Attributes.Add("name", dayName);
        monthsList.Attributes.Add("name", monthName);
        yearsList.Attributes.Add("name", yearName);

        StringBuilder days = new StringBuilder();
        StringBuilder months = new StringBuilder();
        StringBuilder years = new StringBuilder();

        int beginYear = DateTime.UtcNow.Year - 100;
        int endYear = DateTime.UtcNow.Year;

        for (int i = 1; i <= 31; i++)
            days.AppendFormat("<option value='{0}'>{0}</option>", i);

        for (int i = 1; i <= 12; i++)
            months.AppendFormat("<option value='{0}'>{0}</option>", i);

        for (int i = beginYear; i <= endYear; i++)
            years.AppendFormat("<option value='{0}'>{0}</option>", i);

        daysList.InnerHtml = days.ToString();
        monthsList.InnerHtml = months.ToString();
        yearsList.InnerHtml = years.ToString();

        return string.Concat(daysList.ToString(), monthsList.ToString(), yearsList.ToString());
    }
}

but how do I use it on my mvc razor page .I tried by

@Html.DatePickerDropDowns("dayName","monthName","yearName")

but when I loaded my razor page ,it did n't worked ,it's just showing html syntax,I mean it's not showing up the actual dropdown lists. What I am I doing wrong here .how can I fix this and show three dropdowns 1 for day, 1 for month and 1 for years ?

Community
  • 1
  • 1
roney
  • 964
  • 3
  • 15
  • 37
  • possible duplicate of [Adding your own HtmlHelper in ASP.NET MVC 3](http://stackoverflow.com/questions/5052752/adding-your-own-htmlhelper-in-asp-net-mvc-3) – Ian Mercer Oct 12 '14 at 06:26
  • if you mean that the extension method does not get loaded, you should add a using statement for the namespace in which your extension method class exists – mfarouk Oct 12 '14 at 06:32
  • Show the output html – Dejan.S Oct 12 '14 at 06:55

1 Answers1

1

You have to change the defined return of your Helper. Make sure you use MvcHtmlString and the return return MvcHtmlString.Create(String.Concat(daysList.ToString(), monthsList.ToString(), yearsList.ToString()));

Complete code:

public static MvcHtmlString DatePickerDropDowns(this HtmlHelper html, string dayName, string monthName, string yearName)
{
    var daysList = new TagBuilder("select");
    var monthsList = new TagBuilder("select");
    var yearsList = new TagBuilder("select");

    daysList.Attributes.Add("name", dayName);
    monthsList.Attributes.Add("name", monthName);
    yearsList.Attributes.Add("name", yearName);

    StringBuilder days = new StringBuilder();
    StringBuilder months = new StringBuilder();
    StringBuilder years = new StringBuilder();

    int beginYear = DateTime.UtcNow.Year - 100;
    int endYear = DateTime.UtcNow.Year;

    for (int i = 1; i <= 31; i++)
        days.AppendFormat("<option value='{0}'>{0}</option>", i);

    for (int i = 1; i <= 12; i++)
        months.AppendFormat("<option value='{0}'>{0}</option>", i);

    for (int i = beginYear; i <= endYear; i++)
        years.AppendFormat("<option value='{0}'>{0}</option>", i);

    daysList.InnerHtml = days.ToString();
    monthsList.InnerHtml = months.ToString();
    yearsList.InnerHtml = years.ToString();

    return MvcHtmlString.Create(String.Concat(daysList.ToString(), monthsList.ToString(), yearsList.ToString()));
}
blfuentes
  • 2,731
  • 5
  • 44
  • 72