2012-08-26 8 views
5

Tôi bị mất một chút khi tạo Trình trợ giúp MVC3. Tôi có helper của tôi mà chỉ cần tạo ra một hàng với một biểu thức được thông qua như là tham số.MVC3 cách sử dụng @<text></text> làm thông số trợ giúp html

Tôi muốn sử dụng HtmlHelper tôi như thế này:

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

Đây là HtmlHelper tôi (một số mã không liên quan đã được gỡ bỏ):

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

Tôi thậm chí không thể biên dịch nó, bởi vì các Tham số @<text>...</text> không hợp lệ cho HtmlHelper vì nó là 'biểu thức lambda' và không thể được chuyển đổi thành Biểu thức>

Bất cứ ai cũng có thể giúp giải quyết nó? Tôi chỉ muốn vượt qua bất kỳ loại @<text></text> để HtmlHelper của tôi, và nó chỉ biên dịch nó và đặt nó là MvcHtmlString vào trở lại hình thành.

SOLUTION:

tôi thấy gì tôi đang tìm kiếm cho bài viết này: ASP.Net MVC3 - Pass razor markup as a parameter

Loại tham số cho @<text></text> phải là một Func<object, HtmlHelper>!

Trả lời

2

Các <text>...</text> or @: là một cú pháp Razor (không phải C#) để tránh các yếu tố html, vì vậy usggestion của tôi sẽ là bạn sử dụng chuỗi như tham số thay vì @<text>

+1

Nhưng làm điều đó tôi sẽ mất lợi thế đánh máy mạnh mẽ khi sử dụng trình trợ giúp html bên trong thông số. Dù sao, nếu tôi sử dụng chuỗi, có cách nào để tôi có thể biên dịch nó trong Trình trợ giúp của tôi không? (Hãy tưởng tượng một chuỗi được tạo thành bởi nội dung của ví dụ về thẻ của tôi) – IPValverde