Pergunta

Eu suponho que isso não é um grande negócio, pois não há outra maneira de contornar este problema, mas eu estou realmente curioso para saber a resposta, pois eu pensava que isso era possível fazer.

Eu tenho uma propriedade pública que retorna um valor booleano no meu código para trás.Gostaria de acessar este servidor variável na minha função de validação javascript, mas até agora, não o bastante para conseguir.

Public Property editMode() As Boolean
    Get
        If Cache("editMode") IsNot Nothing Then
            Return (DirectCast(Cache("editMode"), Boolean))
        Else
            Return False
        End If
    End Get
    Set(ByVal value As Boolean)
        Cache("editMode") = value
    End Set
End Property

function validateEdit()
{
    alert("editMode value is " + '<%#editMode()%>');
    if ('<%#editMode()%>'.toString() == "True")
    {
        alert("You are currently in edit mode. Please save or cancel changes.");
        return false;
    }
    return true;
}

Eu tentei um monte de variações sobre isso, mas é sempre Falsa.No atual código de alerta retorna "editMode valor é Falso"

Quando eu uso:

if ('<%#editMode()%>') ...

Em seguida, ele ainda é sempre Falso, mas ela vai para a condição se, assim, o comportamento é como se fosse sempre verdadeira.

Um outro aspecto a mencionar é que a maioria javascript/servidor tag coisas que eu encontre diz para usar <%=editMode %>, mas eu não posso fazer isso, porque cada vez que eu uso o = em vez de os # recebo uma exceção:

"A coleção de Controles não podem ser modificado porque o controle contém blocos de código (por exemplo,<% ...%>)."

Então eu resolvi isso usando # e dizendo:

    Page.Header.DataBind()
    Page.Form.DataBind()

No evento load da página manipulador.

Qualquer idéias?Obrigado antecipadamente.:)

(Também, eu costumo usar C#, então eu poderia ter inadvertidamente feito algo pateta em VB parte, então sinta-se livre ao ponto de que fora também)

Foi útil?

Solução 2

Isso me ajudou a corrigir o erro."A colecção de Controlos não pode ser modificado porque o controle contém blocos de código"

Mover a função javascript para fora da cabeça e no corpo, corrige o problema.Parece ser algumas coisas que podem causar este problema, mas no meu caso, o culpado mais provável é o AjaxToolKit.

Outras dicas

Primeiro, tente alterar a este:

<%=editMode()%>

Não tenho certeza se é isso, mas ele não pode machucar.Segundo, você está no modo de edição quando você carregar a página?Que o código será executado do lado do servidor e retornar o resultado para o usuário.

Na página do usuário, eles vão ver:

function validateEdit()
{
    alert("editMode value is " + 'False');
    if ('False'.toString() == "True")
    {
        alert("You are currently in edit mode. Please save or cancel changes.");
        return false;
    }
    return true;
}

Novamente, não tenho certeza se é isso, mas é importante entender que o javascript não está fazendo chamadas para o servidor.

Só mais uma coisa.

Você não percebe que você está convertendo uma string para outra seqüência de caracteres com

'<%#editMode()%>'.toString() 

Direito?

Eu acho que o que você quer é isso

if ('<% =editMode.toString() %>'= 'True')...

ou Melhor ainda

if (<% =editMode.toString().ToLower() %>)...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top