2012-08-26 8 views
5

Jestem trochę zagubiony przy tworzeniu pomocnika MVC3. Mam mojego pomocnika, który po prostu tworzy wiersz z wyrażeniem przekazanym jako parametr.MVC3 jak używać @<text></text> jako parametr helpera html

chcę używać mojego HtmlHelper tak:

@Html.AddTableFormField(model => model.UserName, @<text> 
     @Html.EditorFor(m => m.UserName)<span class="warning">Use only letters</span> 
    </text>) 

To moje HtmlHelper (niektóre nieistotne kod został usunięty):

public static MvcHtmlString AddTableFormField<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> property, Expression<Func<TModel>> customFormat = null) 
    { 
     var metadata = ModelMetadata.FromLambdaExpression(property, htmlHelper.ViewData); 

     string displayName = metadata.DisplayName; 

     var propName = metadata.PropertyName; 

     if (string.IsNullOrWhiteSpace(displayName)) 
      displayName = propName; 

     MvcHtmlString htmlCustomFormat = null; 

     if (customFormat != null) 
     { 
      var deleg = customFormat.Compile(); 
      htmlCustomFormat = new MvcHtmlString(deleg().ToString()); 
     } 
     else 
      htmlCustomFormat = htmlHelper.EditorFor(property); 

     return new MvcHtmlString(string.Format("<tr>"+ 
       "<td class=\"form-label\">"+ 
        "<label class=\"editor-label\" for=\"{0}\">{1}<label>"+ 
       "</td>"+ 
       "<td class=\"form-data\">"+ 
        "{2}"+ 
       "</td>"+ 
      "</tr>", 
      propName, displayName, htmlCustomFormat)); 
    } 

nawet nie mogę go skompilować, bo @<text>...</text> Parametr jest nieprawidłowy dla znacznika HtmlHelper, ponieważ jest to "wyrażenie lambda" i nie można go przekonwertować na wyrażenie>

Ktoś może pomóc rozwiązać ten problem? Po prostu chcę przekazać dowolny rodzaj @<text></text> do mojego HtmlHelper, a on po prostu skompiluje go i wstawi MvcHtmlString do formowanego zwrotu.

ROZWIĄZANIE:

znalazłem to, czego szukałem w tym poście: ASP.Net MVC3 - Pass razor markup as a parameter

Parametr typu dla @<text></text> musi być Func<object, HtmlHelper>!

Odpowiedz

2

<text>...</text> or @: jest składni Razor (nie C#), aby uniknąć elementów HTML, więc moja usggestion będzie skorzystanie ciąg jako parametr zamiast @<text>

+1

Ale w ten sposób utracę silnie wypróbowaną przewagę używania pomocników html wewnątrz parametru. W każdym razie, jeśli używam napisu, czy istnieje sposób, który mogę skompilować w moim Helper? (Wyobraź sobie łańcuch utworzony przez treść moich tagów ) – IPValverde

Powiązane problemy