Pergunta

Eu estou confuso com a forma como vistas são organizados, e é importante entender isso como ASP.NET MVC utiliza convenções para obter direito a trabalhar tudo.

De acordo com o anuário de vista, existem subdiretórios. Dentro destes subdiretórios são vistas. Estou assumindo que os subdiretórios mapear para os controladores e os controladores de agir sobre os pontos de vista contidos dentro de seus subdiretórios.

Existe uma expectativa emergente de que tipos de pontos de vista estão contidos dentro desses diretórios? Por exemplo, se a página padrão para cada diretório ser index.aspx? Caso as páginas seguem uma convenção de nomenclatura como Criar [controller] aspx, List [controller] aspx, etc? Ou faz isso não importa?

Foi útil?

Solução

Ver nomeação diretório e nomeação de arquivos são importantes, porque a estrutura ASP.NET MVC faz certas suposições sobre eles. Se você não se conformam a essas premissas, então você deve escrever código para permitir que a estrutura sabe o que está fazendo. De um modo geral, você deve obedecer a estes pressupostos, a menos que você tenha uma boa razão para não.

Vamos olhar a mais simples ação do controlador possíveis:

    public ActionResult NotAuthorized()
    {
        return View();
    }

Porque nenhum nome de exibição foi especificado na chamada para Vista (), o quadro irá presumir que o nome do arquivo de vista vai ser o mesmo que o nome da ação. O quadro tem um tipo chamado ViewEngine que fornecerá a extensão. O ViewEngine padrão é WebFormViewEngine, que terá esse nome e anexar um aspx a ele. Assim, o nome completo, neste caso, seria NotAuthorized.aspx.

Mas em qual pasta será o arquivo pode ser encontrado? Mais uma vez, os suprimentos ViewEngine essa informação. Com WebFormViewEngine, ele vai olhar em duas pastas: ~ / Views / Shared e ~ / Views / {controller}

Então, se o controlador foi chamado AccountController, ele ficaria em ~ / Views / Conta

Mas pode haver momentos em que você não quer seguir estas regras. Por exemplo, duas ações diferentes pode retornar a mesma visão (com um modelo diferente, ou algo assim). Neste caso, se você especificar o nome da visão explicitamente em sua ação:

    public ActionResult NotAuthorized()
    {
        return View("Foo");
    }

Note que, com WebFormViewEngine, o "nome da visão" é geralmente o mesmo que o nome do arquivo, menos a extensão, mas o quadro não necessita de outros motores de vista.

Da mesma forma, você também pode ter uma razão para querer seu aplicativo para olhar para vistas e pastas não padrão. Você pode fazer isso através da criação de seu próprio ViewEngine. Eu mostro a técnica em este Blog Post , mas os nomes de tipo são diferentes, uma vez que foi escrito para uma versão anterior do quadro. A idéia básica ainda é o mesmo, no entanto.

Outras dicas

Em relação aos nomes esperados para os pontos de vista, eu acho que é uma daquelas coisas que cada projeto ou organização vai tentar padronizar.

Como você deu a entender na sua pergunta, é possível que alguns desses pontos de vista (ou mais precisamente, as ações que os tornam) tornaram-se populares em toda a linha, como por exemplo os abaixo que são comuns em aplicações RoR que adotam o RESTO paradigma:

  • / ordens / (índice i)
  • / encomendas / show / 123
  • / encomendas / editar / 123
  • / encomendas / update / 123
  • / encomendas / novo
  • / encomendas / criar
  • / encomendas / destruir / 123

A escolha / padronização dos pontos de vista é em grande parte dependente da forma como você modela sua aplicação (para dizer o óbvio) e como você quer ir de grão fino. Quanto mais perto você mapear seus controladores para aulas individuais modelo (tosse ... recursos ... tosse), menor suas ações tendem a ser e mais facilmente você vai ser capaz de seguir um conjunto padrão de ações (como no exemplo acima ).

Eu também acredito que mais curto ações ajuda empurrando mais e mais da lógica de modelo de negócio para os próprios modelos, onde ele pertence.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top