Как я могу получить доступ к ValidationMessageFor из метода расширения - PullRequest
1 голос
/ 10 мая 2011

Как я могу получить доступ к html-расширениям ... Например, LabelFor, EditorFor, ValidationMessageFor

Я пишу свое собственное расширение вот так

Imports System
Imports System.Web.Mvc
Imports System.Web.Mvc.Html
Imports System.Web
Imports System.Text

Public Module HtmlExtensions
    <System.Runtime.CompilerServices.Extension()> _
    Public Function Asistente(Of TModel As Class)(ByVal helper As HtmlHelper, model As TModel) As MvcHtmlString
        helper.ValidationMessage("Home") 'It works fine
        helper.ValidationMessagefor()    'It show the next message 'ValidationMessagefor' is not a member of 'System.Web.Mvc.HtmlHelper     
    End Function

...

На самом деле это потому, что яхочу создать mvcHtmlString вот так

<div class="editor-label">
    @Html.LabelFor(Function(model) model.Numero)
</div>
<div class="editor-field">
    @Html.EditorFor(Function(model) model.Numero)
    **@Html.ValidationMessageFor(Function(model) model.Numero)**
</div>

С уважением

1 Ответ

0 голосов
/ 11 мая 2011

Для метода ValidationMessageFor требуется вспомогательный вспомогательный тип html. Таким образом, ваш метод должен выглядеть примерно так:

Public Shared Function Asistente(Of TModel, TProperty)(helper As HtmlHelper(Of TModel), expression As Expression(Of Func(Of TModel, TProperty))) As HtmlString
    Return helper.ValidationMessageFor(expression)
End Function

Это позволит вам использовать это расширение для любой модели, и ваш звонок не изменится. Я не совсем уверен в том, что вы спрашиваете.

**@Html.Asistente(Function(model) model.Numero)**

(обратите внимание, что vb был создан с использованием конвертера c # в vb - но это выглядит правильно)

Если вы хотите использовать первый пример, который вы разместили, вам нужно написать что-то вроде этого:

Public Shared Function Test(Of T As User)(helper As HtmlHelper(Of T), model As T) As HtmlString
    Return helper.ValidationMessageFor(Function(f) f.Name)
End Function

Тем не менее, это особый вариант использования, потому что если вы не принудительно зададите тип модели для определенного типа, вы не увидите свойства лямбда-выражения и, следовательно, не скомпилируете.

...