Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 516005
            [titulo] => Equivalente do  window.innerWidth do Javascript no ASP.NET MVC
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-04-07 16:13:03
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 232232
            [status] => A
            [isExample] => 
            [NomeUsuario] => Joel Rodrigues
            [Apelido] => 
            [Foto] => 232232_20161017163010.jpg
            [Conteudo] => Olá, Jairo.
Essa é uma verificação própria do browser, não do servidor, por isso não pode ser feita no Controller. Ela realmente tem que ser feita na View e com JavaScript (meio caminho você já andou). Existem algumas formas de passar isso para o controller, mas vai depender muito da sua necessidade. Por exemplo:
- Colocar esse valor em um input hidden que esteja dentro de um form e ao submeter esse form, esse valor iria junto;
- Enviar esse valor ao Controller via Ajax;
Qual é exatamente sua necessidade de acessar esse valor no lado servidor da sua aplicação? ) )

Equivalente do window.innerWidth do Javascript no ASP.NET MVC

Jairo
|
MVP
    06 abr 2015

Olá,
Estou precisando saber em uma aplicação ASP.NET MVC, seja em nível de Controller ou em nível de view a dimensão da janela do Browser.
Consegui através do javascript com window.innerWidth; só que não sei como passar esse valor para o C#. Nem para a view, nem para o controller.
Então se alguém souber como posso obter esse valor ou em nível de controller, ou em nível de view ou ainda se puder chamar uma função javascript e obter esse valor. Tentei um HtmlHelper EditorFor e joguei esse valor para esse EditorFor para ver se ao jogar esse valor através do getElementById se atualizava o valor no model, mas não aconteceu isso. Alguém poderia me dar uma idéia de como conseguir isso?
Obrigado,
Jairo

Post mais votado

Joel Rodrigues
   - 07 abr 2015

Olá, Jairo.
Essa é uma verificação própria do browser, não do servidor, por isso não pode ser feita no Controller. Ela realmente tem que ser feita na View e com JavaScript (meio caminho você já andou). Existem algumas formas de passar isso para o controller, mas vai depender muito da sua necessidade. Por exemplo:
- Colocar esse valor em um input hidden que esteja dentro de um form e ao submeter esse form, esse valor iria junto;
- Enviar esse valor ao Controller via Ajax;
Qual é exatamente sua necessidade de acessar esse valor no lado servidor da sua aplicação?

Jairo
|
MVP
    10 abr 2015

Oi Joel,
Antes de mais nada, obrigado pela sua boa vontade.
Suponha que eu tenha uma view que apresenta no momento atual, o status dos equipamentos que eu disponho. (se está trabalhando, parado,quebrado etc.) Se o usuário clicar em algum deles, o programa deverá apresentar detalhadamente por hora o que esse equipamento fez. Os dados são apresentados em uma view. Gostaria de saber as dimensões da tela par configurar as colunas da view em função dessa dimensão. Colocaria mais ou menos colunas.
Mais uma vez, obrigado
Jairo

Joel Rodrigues
   - 10 abr 2015

Essa segunda view será aberta em um modal ou algo do tipo? Porque se você for redirecionar para outra view quando clicar na tabela, essa verificação da largura pode ser feita diretamente na view dos dados e ja alterar o HTML la mesmo. Deu pra sacar a ideia?

Jairo
|
MVP
    12 abr 2015

Olá Joel,

Não é modal não Quando clica nessa primeira tela, há o retorno para o controller que vai chamar a outra view.
O problema é exatamente isso, Quem monta a view é o Razor, eu consigo achar o tamanho da tela no javascript, mas não sei como passar esse valor para o model ou para o razor ou para o C#. Não consigo.

Obrigado,
Jairo

Joel Rodrigues
   - 13 abr 2015

Então, como eu disse esse procedimento de montagem do layout pode ser feito diretamente na view final.
Uma forma seria você montar todas as colunas e, de acordo com a largura da tela, esconder algumas via JavaScript. Isso seria feito com um script JS dentro da view.

Jairo
|
MVP
    13 abr 2015

Oi Joel,
Talvez eu não esteja conseguindo me explicar bem. Quem monta a view é o Razor.
Eu NÃO consigo passar o valor do Javascript para o Razor. Esse é o meu problema.
você poderia dar uma idéia do que é que você está falando?
Obrigado,
Jairo

Jairo
|
MVP
    13 abr 2015

Oi Joel,
Talvez eu não esteja conseguindo me explicar bem. Quem monta a view é o Razor.
Eu NÃO consigo passar o valor do Javascript para o Razor. Esse é o meu problema.
você poderia dar uma idéia do que é que você está falando?
Obrigado,
Jairo

Jairo
|
MVP
    13 abr 2015

Oi Joel,
Talvez eu não esteja conseguindo me explicar bem. Quem monta a view é o Razor.
Eu NÃO consigo passar o valor do Javascript para o Razor. Esse é o meu problema.
você poderia dar uma idéia do que é que você está falando?
Obrigado,
Jairo

Jairo
|
MVP
    13 abr 2015

Oi Joel,
Talvez eu não esteja conseguindo me explicar bem. Quem monta a view é o Razor.
Eu NÃO consigo passar o valor do Javascript para o Razor. Esse é o meu problema.
você poderia dar uma idéia do que é que você está falando?
Obrigado,
Jairo

Joel Rodrigues
   - 13 abr 2015

Então, Jairo. Tenha em mente que o Razor basicamente escreve código HTML na view. Se você executar sua aplicação e no browser inspecionar o código, verá que não tem nada além de HTML. Esses métodos do tipo Html.TextBoxFor são chamados de Helper Methods exatamente porque facilitam a escrita de HTML a partir de dados do model, por exemplo.

Assim, considerando que sua view esteja montada com todas as colunas, você pode em um script esconder uma ou outra coluna. Algo desse tipo:

#Código

<script >
$(function(){
.  if (window.innerWidth < 1024)
.    $("#coluna4").hide();
});
</script>


Ai estou usando jQuery, mas você pode fazer com JavaScript puro, apesar de assim ser mais fácil.

Caso fiquem dúvidas, é só dizer.

Jairo
|
MVP
    14 abr 2015

Oi Joel,

Vou tentar desta forma que você colocou.
Beleza!

Muito obrigado por sua boa vontade e paciencia.

Jairo