2014-10-12 73 views
0

我想重用HTML辅助发现hereMVC HTML辅助扩展

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()); 
    } 
} 

但我怎么使用我的MVC剃刀页面上。我通过

@ Html.DatePickerDropDowns(“DAYNAME尝试“,”monthName“,”yearName“)

但是当我加载我的剃刀页面,它没有工作,它只是显示HTML语法,我的意思是它没有显示实际的下拉列表。 我在做什么这里错了。我可以解决这个问题,并显示三天下拉1天,1月和1年多年?

+0

可能重复http://stackoverflow.com/questions/5052752/adding-your-own-htmlhelper-in-asp-net-mvc-3) – 2014-10-12 06:26:11

+0

如果你的意思是扩展方法没有被加载,你应该为扩展方法类存在的命名空间添加一个using语句 – mfarouk 2014-10-12 06:32:22

+0

显示输出html – 2014-10-12 06:55:07

回答

1

您必须更改您的助手定义的回报。 确保您使用MvcHtmlString和返回return MvcHtmlString.Create(String.Concat(daysList.ToString(), monthsList.ToString(), yearsList.ToString()));

完整代码:[ASP.NET中添加自己的HtmlHelper MVC 3](的

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())); 
} 
0

而不是返回string返回MvcHtmlString

public static MvcHtmlString DatePickerDropDowns(this HtmlHelper html, string dayName, string monthName, string yearName)