首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从扩展方法访问ValidationMessageFor

如何从扩展方法访问ValidationMessageFor
EN

Stack Overflow用户
提问于 2011-05-11 02:24:45
回答 1查看 894关注 0票数 1

如何访问LabelFor、EditorFor、ValidationMessageFor等html扩展...For

我正在编写自己的扩展,就像这样

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

提前致以问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-11 04:53:52

ValidationMessageFor方法需要泛型类型html帮助器。所以你的方法应该看起来像这样:

代码语言:javascript
复制
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

这将允许您对任何型号使用该扩展,并且您的呼叫不会改变。不过,我不太清楚你在问什么。

代码语言:javascript
复制
**@Html.Asistente(Function(model) model.Numero)**

(请注意,vb是使用c#到vb的转换器生成的-但它看起来是正确的)

如果你想使用你发布的第一个样本,那么你必须像这样写它:

代码语言:javascript
复制
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

但是,这是一个特定的用例,因为如果不强制将模型类型设置为特定类型,则不会显示lambda表达式属性,因此不会进行编译。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5954609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档