带String.Format的ASP.NET表达式(内联标记)

带String.Format的ASP.NET表达式(内联标记),asp.net,Asp.net,我只是想知道是否可以将String.Format与以下内联标记一起使用: <asp:RequiredFieldValidator ControlToValidate="tbTest" Text="<%$ Resources:ErrorMsg, E3032 %>" runat="server" /> 像这样 <asp:RequiredFieldValidator ControlToValidate="tbTest" Text='<%= String.Fo

我只是想知道是否可以将
String.Format
与以下内联标记一起使用:

<asp:RequiredFieldValidator ControlToValidate="tbTest" Text="<%$ Resources:ErrorMsg, E3032  %>" runat="server" />

像这样

<asp:RequiredFieldValidator ControlToValidate="tbTest" Text='<%= String.Format(<%$ Resources:ErrorMsg, E3032  %>, "Other Text to insert")' runat="server" />

我知道你不能那样做,但这只是为了拍照片


tx

资源绑定语法仅限于接受两个参数:资源容器的名称和资源密钥。

您可以在数据绑定中使用

<asp:RequiredFieldValidator 
       ControlToValidate="tbTest" 
       Text='<%# String.Format(
                     Convert.ToString(GetGlobalResourceObject("ErrorMsg", "E3032"), 
                     System.Globalization.CultureInfo.CurrentCulture),
                         "Other Text to insert") %>'
        />


如果控件不是数据库控件的子控件,则可能需要调用tbTest.DataBind()。

为此,我创建了自己的表达式:

web.config:

<expressionBuilders>
  <add expressionPrefix="CreerMsgErreur" type="MsgErreurs, App_Code" /> 
</expressionBuilders>

.aspx:

<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="tbdDateFin"
 CssClass="test" Text="<%$ CreerMsgErreur:E3033, insert, date %>"
 ErrorMessage="<%$ CreerMsgErreur:E3033, insert, date %>"
 runat="server" EnableClientScript="true" SetFocusOnError="true" />

.vb:

导入系统
导入System.CodeDom
导入系统
导入System.Security.Permissions
导入系统.Web
导入System.Web.Compilation
导入System.Web.UI
_
_
_
公共类MsgErreurs
继承ExpressionBuilder
公共重写函数GetCodeExpression(ByVal条目作为System.Web.UI.BoundPropertyEntry,ByVal parsedData作为对象,ByVal上下文作为System.Web.Compilation.ExpressionBuilderContext)作为System.CodeDom.CodeExpression
如果parsedData不是空的,那么
返回新的CodePrimitiveExpression(CType(parsedData,MsgErreursParse).ToString())
如果结束
返回新的CodePrimitiveExpression(“Erreur de l'expression”)
端函数
Public将函数ParseExpression(ByVal表达式作为字符串,ByVal propertyType作为System.Type,ByVal上下文作为System.Web.Compilation.ExpressionBuilderContext)作为对象重写
Dim lemsgerreursreur作为MsgErreursParse=Nothing
如果不是String.IsNullOrEmpty(表达式),则
leMsgErreur=New-MsgErreursParse(表达式)
其他的
抛出新的HttpException(String.Format(“Message de l'expression MsgErreur vous devez enter une expression.”)
如果结束
返回旅店
端函数
私有类MsgErreursParse
私有mNoErreur作为字符串
私有参数作为字符串
公共属性NoErreur()作为字符串
得到
返回mNoErreur
结束
设置(ByVal值作为字符串)
mNoErreur=值
端集
端属性
公共属性参数()作为字符串
得到
返回参数
结束
设置(ByVal值作为字符串)
mParameters=值
端集
端属性
Public Sub New(ByVal参数为字符串)
尝试
mNoErreur=parameters.Substring(0,parameters.IndexOf(“,”).Trim()
mParametres=parametres.Substring(parametres.IndexOf(“,”)+1.Trim()
捕获ex作为ArgumentOutOfRangeException
mNoErreur=参数
特例
结束尝试
如果String.IsNullOrEmpty(mNoErreur),则
抛出新的HttpException(String.Format(“Message de l'expression MsgErreur:vous devez spécifier un code d'erreur ou les paramètres ne sont pas dans le bon Format:{0}”,参数))
如果结束
端接头
Public Sub New(ByVal noErreur作为字符串,ByVal参数作为字符串)
mNoErreur=noErreur
mParametres=参数
端接头
Public将函数ToString()重写为字符串
尝试
如果String.IsNullOrEmpty(参数),则
返回Convert.ToString(HttpContext.GetGlobalResourceObject(“MsgErreurs”,NoErreur),System.Globalization.CultureInfo.CurrentCulture)
其他的
返回String.Format(Convert.ToString(HttpContext.GetGlobalResourceObject(“MsgErreurs”,NoErreur),System.Globalization.CultureInfo.CurrentCulture),parameters.Split(“,”).Select(函数s.Trim()).ToArray())
如果结束
特例
抛出新的HttpException(String.Format(“Message de l'expression MsgErreur:impossable de créer le Message d'erreur:NoErreur:{0},参数:{1}”,NoErreur,参数))
结束尝试
端函数
末级
末级

要插入的其他文本不也需要来自资源文件吗?很好!但不是针对我正在处理的情况。:)Resources:ErrorMsg是否给出格式类型字符串?给我们一个输出的例子。输出类似于:“{0}是必需的。”所以我希望String.Format(,“Name”)给我“Name是必需的”。我不太喜欢解决方案bc,我不想为每个验证器调用DataBind()。不妨从codebehind开始做所有事情,但后来我在Page_load中尝试了Page.DataBind(),它成功了。酷。只希望它不会干扰其他数据绑定控件。
Imports System
Imports System.CodeDom
Imports System.Linq
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.Compilation
Imports System.Web.UI

<ExpressionPrefix("Reflect")> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.LinkDemand, Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class MsgErreurs
    Inherits ExpressionBuilder

    Public Overrides Function GetCodeExpression(ByVal entry As System.Web.UI.BoundPropertyEntry, ByVal parsedData As Object, ByVal context As System.Web.Compilation.ExpressionBuilderContext) As System.CodeDom.CodeExpression
        If parsedData IsNot Nothing Then
            Return New CodePrimitiveExpression(CType(parsedData, MsgErreursParse).ToString())
        End If

        Return New CodePrimitiveExpression("Erreur de l'expression")
    End Function

    Public Overrides Function ParseExpression(ByVal expression As String, ByVal propertyType As System.Type, ByVal context As System.Web.Compilation.ExpressionBuilderContext) As Object

        Dim leMsgErreur As MsgErreursParse = Nothing

        If Not String.IsNullOrEmpty(expression) Then
            leMsgErreur = New MsgErreursParse(expression)
        Else
            Throw New HttpException(String.Format("Message de l'expression MsgErreur vous devez entrer une expression."))
        End If

        Return leMsgErreur
    End Function

    Private Class MsgErreursParse
        Private mNoErreur As String
        Private mParametres As String

        Public Property NoErreur() As String
            Get
                Return mNoErreur
            End Get
            Set(ByVal value As String)
                mNoErreur = value
            End Set
        End Property

        Public Property Parametres() As String
            Get
                Return mParametres
            End Get
            Set(ByVal value As String)
                mParametres = value
            End Set
        End Property

        Public Sub New(ByVal parametres As String)
            Try
                mNoErreur = parametres.Substring(0, parametres.IndexOf(",")).Trim()
                mParametres = parametres.Substring(parametres.IndexOf(",") + 1).Trim()
            Catch ex As ArgumentOutOfRangeException
                mNoErreur = parametres
            Catch ex As Exception

            End Try

            If String.IsNullOrEmpty(mNoErreur) Then
                Throw New HttpException(String.Format("Message de l'expression MsgErreur : vous devez spécifier un code d'erreur ou les paramètres ne sont pas dans le bon format : {0}", parametres))
            End If
        End Sub

        Public Sub New(ByVal noErreur As String, ByVal parametres As String)
            mNoErreur = noErreur
            mParametres = parametres
        End Sub

        Public Overrides Function ToString() As String
            Try
                If String.IsNullOrEmpty(Parametres) Then
                    Return Convert.ToString(HttpContext.GetGlobalResourceObject("MsgErreurs", NoErreur), System.Globalization.CultureInfo.CurrentCulture)
                Else
                    Return String.Format(Convert.ToString(HttpContext.GetGlobalResourceObject("MsgErreurs", NoErreur), System.Globalization.CultureInfo.CurrentCulture), Parametres.Split(",").Select(Function(s) s.Trim()).ToArray())
                End If
            Catch ex As Exception
                Throw New HttpException(String.Format("Message de l'expression MsgErreur : impossible de créer le message d'erreur : NoErreur : {0}, Parametres : {1}", NoErreur, Parametres))
            End Try
        End Function
    End Class

End Class