none
Html.ActionLink VS MasterPage - Nao reconhece RRS feed

  • Pergunta

  • Ola pessoa

    criei uma masterpage e adicionei o link <% Html.ActionLink("Home", "Index", "Home")%>, porem, ele nao reconhece o "Html.ActionLink" e em paginas normais, ele reconhece

    o que devo importar?por que ocorre esse erro?

     

    abs

    obrigado


    Carlos Eduardo Barbosa Analista de Sistema Business Intelligence WEB Intelligence
    segunda-feira, 13 de dezembro de 2010 19:38

Respostas

  • Fala Carlos,

    >> em MVC nao e possivel ter o codeBehind?
    Sim, é possível, pois é possível utilizar (e até o MVC 2 era o padrão) a mesma View Engine do Web Forms (aspx). A partir do MVC 3 o padrão é o Razor, que não tem code-behind...
    Mas é extremamente recomendável que não se faça uso de code-behind no MVC. Isso já foi discutido por aqui mesmo diversas vezes... Dá uma procurada que você vai achar as diversas razões... De cara, você não tem ViewState e PostBack, o que já injustifica complemamente o uso do code-behind...

    Com relação à sua master page, eu a principio desconfiei que pudesse ser o fato de a classe "Index" do seu code-behind estar herdando de System.Web.UI.MasterPage, e a View em si herdando de System.Web.Mvc.ViewMasterPage.

    Mas resolvi testar aqui, copiei a sua Master (e o code-behind) e pra minha surpresa, não tomei nenhum erro... Os links apareceram numa boa, o intelisense reconheceu o Html.ActionLink...

    Você criaou essa aplicação com o template ASP.NET MVC application? Ou está migrando uma aplicação Web Forms pra MVC? Aparentemente parece estar faltando alguma referência no seu projeto...

     


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    Procurando treinamento de ASP.NET MVC?

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    terça-feira, 14 de dezembro de 2010 16:32
    Moderador

Todas as Respostas

  • Fala,

    Imagino que você deva ter digitado errado, mas ao invés de:

    <% Html.ActionLink("Home", "Index", "Home") %>

    deveria ser:

    <%= Html.ActionLink("Home", "Index", "Home")%>

    Ou seja, faltou o sinal de "=". Se não for isso, posta o código da Master aqui, porque deveria funcionar numa boa...

     


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    Procurando treinamento de ASP.NET MVC?

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    segunda-feira, 13 de dezembro de 2010 22:11
    Moderador
  • Blz andre?

    entao, eu tentei desta forma e tambem nao funcionou, ele nao reconhece o comando mesmo

    ate chegue a importar o nameSpace e fazer o caminho completo, mas mesmo assim ele nao reconhece

    Meu masterPage

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Index.master.cs" Inherits="System.Web.Mvc.ViewMasterPage" %>
    <use namespace="System.Web.Mvc.Html" />
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
      <asp:ContentPlaceHolder ID="head" runat="server">
      </asp:ContentPlaceHolder>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
            <div id="menucontainer">
              <ul id="menu">
              <li>
              </li>
                <li><%= Html.ActionLink("Home", "Index", "Home", null, null)%></li>
                <li><%= Html.ActionLink("About", "About", "Home", null, null)%></li>
              </ul>
            </div> 
        <asp:ContentPlaceHolder ID="cphMainContent" runat="server">
        
        </asp:ContentPlaceHolder>
      </div>
      </form>
    </body>
    </html>
    

     

    BehindCode

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Mvc;
    
    namespace PresentationWebLayer.Views.Shared
    {
      public partial class Index : System.Web.UI.MasterPage
      {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
      }
    }

    abs

    e obrigado


    Carlos Eduardo Barbosa Analista de Sistema Business Intelligence WEB Intelligence
    terça-feira, 14 de dezembro de 2010 10:10
  • Duas coisas me deixam intrigado:

    • Sua masterpage ter um code behind
    • Na sua masterpage dentro do body ter um form com runat=server

    Mas mesmo assim, veja no seu web.config

    Dentro da tag system.web veja se a tag pages está pelo menos parecida, poste aqui se puder.

    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
      <namespaces>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
      </namespaces>
    </pages>
    
    

    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://dotnettime.wordpress.com/

    terça-feira, 14 de dezembro de 2010 13:46
  • Alberto

    em MVC nao e possivel ter o codeBehind?
    Por que em webForm eu tenho e utilizo.

    sobre o web.config esta existem essas linhas

    obrigado

    abs


    Carlos Eduardo Barbosa Analista de Sistema Business Intelligence WEB Intelligence
    terça-feira, 14 de dezembro de 2010 15:15
  • Fala Carlos,

    >> em MVC nao e possivel ter o codeBehind?
    Sim, é possível, pois é possível utilizar (e até o MVC 2 era o padrão) a mesma View Engine do Web Forms (aspx). A partir do MVC 3 o padrão é o Razor, que não tem code-behind...
    Mas é extremamente recomendável que não se faça uso de code-behind no MVC. Isso já foi discutido por aqui mesmo diversas vezes... Dá uma procurada que você vai achar as diversas razões... De cara, você não tem ViewState e PostBack, o que já injustifica complemamente o uso do code-behind...

    Com relação à sua master page, eu a principio desconfiei que pudesse ser o fato de a classe "Index" do seu code-behind estar herdando de System.Web.UI.MasterPage, e a View em si herdando de System.Web.Mvc.ViewMasterPage.

    Mas resolvi testar aqui, copiei a sua Master (e o code-behind) e pra minha surpresa, não tomei nenhum erro... Os links apareceram numa boa, o intelisense reconheceu o Html.ActionLink...

    Você criaou essa aplicação com o template ASP.NET MVC application? Ou está migrando uma aplicação Web Forms pra MVC? Aparentemente parece estar faltando alguma referência no seu projeto...

     


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    Procurando treinamento de ASP.NET MVC?

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    terça-feira, 14 de dezembro de 2010 16:32
    Moderador
  • Com relação à sua master page, eu a principio desconfiei que pudesse ser o fato de a classe "Index" do seu code-behind estar herdando de System.Web.UI.MasterPage, e a View em si herdando de System.Web.Mvc.ViewMasterPage.

    Mas resolvi testar aqui, copiei a sua Master (e o code-behind) e pra minha surpresa, não tomei nenhum erro... Os links apareceram numa boa, o intelisense reconheceu o Html.ActionLink...


    Tbm aqui funcionou perfeitamente.

    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://dotnettime.wordpress.com/

    terça-feira, 14 de dezembro de 2010 18:03