ASP.NET Expressions (Inline Tag) with String.Format

I was wondering if it can be used String.Format

with the following inline tag:

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

      

like this

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

      

I know you cannot do this, but this is just for the picture.

TX

+1


source to share


2 answers


As a result, I created my own expression for this purpose:

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:

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

      

+1


source


The resource binding syntax is limited to only accepting two parameters: the resource container name and the resource key.



You can use data binding

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

      



You may need to call tbTest.DataBind () if the control is not a child of the database control.

+1


source







All Articles