none
Erro em exemplo de livro RRS feed

  • Pergunta

  • olá, caros amigos.

    Eu tentei rodar um programinha de exemplo de loja de esportes mas dá esse erro:

    The view 'Index' or its master could not be found. The following locations were searched:
    ~/Views/Home/Index.aspx
    ~/Views/Home/Index.ascx
    ~/Views/Shared/Index.aspx
    ~/Views/Shared/Index.ascx

    apontando, dentro do arquivo default.aspc.cd, para a linha:

    httpHandler.ProcessRequest(

    HttpContext.Current);

    O estranho é que eu arrumei a rota para acionar, não o index mas, para List:
    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    "Default",                                              // Route name
                    "{controller}/{action}/{id}",                           // URL 
                    new { controller = "Products", action = "List", id = "" }//Defaults
                );
    
            }
    o arquivo de controller está assim:(o IPorductsRepository fica sublinhado de azul dizendo que "is inaccessible due to its protection level" ... não sei o que é isso...)
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Mvc.Ajax;
    using DomainModel.Abstract;
    using DomainModel.Concrete;
    
    namespace WebUI.Controllers
    {
        public class ProductsController : Controller
        {
            IProductsRepository productsRepository;
            public ProductsController()
            {
                //Temporary hard-coded connection string until we set p Inversion of Control
                string connString = @"Server=.;Database=SportsStore;Trusted_Connection=yew;";
                productsRepository = new SqlProductsRepository(connString);
            }
    
            public ViewResult List()
            {
                return View(productsRepository.Products.ToList());
            }
        }
    }
    E o arquivo List está assim:
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<DomainModel.Entities.Product>>" %>
    
    <asp:Content ContentPlaceHolderID="TitleContent" runat="server">
    	Products
    </asp:Content>
    
    <asp:Content ContentPlaceHolderID="MainContent" runat="server">
        <% foreach (var product in Model)
           { %>
            <div class="item">
                <h3><%= product.Name%></h3>
                <%= product.Description%>
                <h4><%= product.Price.ToString("c")%></h4>
            </div>
        <% } %>
    </asp:Content>

    Alguém sabe o que pode estar impedindo o acesso ao IProductsRepository?

    Eu já fiz a referencia ao domainmodel nos assemblies, não sei porque ele não acessa...

    terça-feira, 15 de setembro de 2009 13:15

Respostas

  • João,

    Este erro:

    Valor inválido para chave 'integrated security'.

    Refere-se a sua string de conexão que deve estar com algum erro.

    Geralmente o valor integrated security de uma string de conexão SQL Server vem seguido do valor SSPI.
    E me paresse que ela pode estar com um problema neste ponto da string.

    Este site pode te ajudar a descobrir o problema: http://www.connectionstrings.com/

    Espero ter ajudado. Qualquer dúvida entre em contato.

    Att,

    Douglas Aguiar
    MCAD, MCT
    • Marcado como Resposta joaoluizbt segunda-feira, 21 de setembro de 2009 11:14
    sábado, 19 de setembro de 2009 14:28

Todas as Respostas

  • A aplicação provavelmente não está compilando, e você deve estar dando ok quando o VS pergunta se você quer continuar com a última versão compilada, né?
    Aí ele está usando a versão que utilizava o "Index" como rota padrão, e não está encontrando esta View Index. Daí o erro que você está recebendo.
    Se o seu IProductsRepository está inacessível, então ele deve estar em outro assembly (projeto), e não está público. Ou ele não tem nenhum modificador de acesso, o que o deixa privado, ou é internal. Modifique ele para "public IProductsRepository".
    Recompile e o problema deve ir embora. Mas a compilação tem que funcionar.
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    terça-feira, 15 de setembro de 2009 13:25
    Moderador
  • Agora deu isso:

    An error occurred while creating a controller of type 'WebUI.Controllers.ProductsController'. If the controller doesn't have a controller factory, ensure that it has a parameterless public constructor.

    apontando para

    httpHandler.ProcessRequest(

    HttpContext.Current);

    terça-feira, 15 de setembro de 2009 13:37
  • No seu exemplo você tem um construtor padrão (sem parâmetros) no ProductsController. Você mudou isso? Se você criou um construtor parametrizado, você tem que criar um controller factory.

    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    terça-feira, 15 de setembro de 2009 13:49
    Moderador
  • Estranho... não mudei não...

    o ProductsController está assim:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Mvc.Ajax;
    using DomainModel.Abstract;
    using DomainModel.Concrete;
    
    namespace WebUI.Controllers
    {
        public class ProductsController : Controller
        {
            IProductsRepository productsRepository;
            public ProductsController()
            {
                //Temporary hard-coded connection string until we set p Inversion of Control
                string connString = @"Server=.;Database=SportsStore;Trusted_Connection=yew;";
                productsRepository = new SqlProductsRepository(connString);
            }
    
            public ViewResult List()
            {
                return View(productsRepository.Products.ToList());
            }
        }
    }
    :(
    terça-feira, 15 de setembro de 2009 14:01
  • Então não tem porque ter aquela mensagem... Já tentou fazer um rebuild?

    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    terça-feira, 15 de setembro de 2009 14:06
    Moderador
  • Estranho, fiz o rebuild e deu a mesma coisa...
    Aí eu refiz o rebuild e tentei iniciar sem o debbug.
    Deu isso:

     

    Erro de Servidor no Aplicativo '/'.

    Valor inválido para chave 'integrated security'.

    Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

    Detalhes da Exceção: System.ArgumentException: Valor inválido para chave 'integrated security'.

    Erro de Origem:

    Linha 14:         public SqlProductsRepository(string connectionString)
    Linha 15:         {
    Linha 16:             productsTable = (new DataContext(connectionString)).GetTable<Product>();
    Linha 17:         }
    Linha 18: 

    Arquivo de Origem: C:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\SportsStore\DomainModel\Concrete\SqlProductsRepository.cs    Linha: 16

    Rastreamento de Pilha:

    [ArgumentException: Valor inválido para chave 'integrated security'.]
       System.Data.Common.DbConnectionOptions.ConvertValueToIntegratedSecurityInternal(String stringValue) +1327052
       System.Data.Common.DbConnectionOptions.ConvertValueToIntegratedSecurity() +4864469
       System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +92
       System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) +24
       System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) +200
       System.Data.SqlClient.SqlConnection.ConnectionString_Set(String value) +62
       System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) +4
       System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Initialize(IDataServices dataServices, Object connection) +237
       System.Data.Linq.DataContext.Init(Object connection, MappingSource mapping) +187
       System.Data.Linq.DataContext..ctor(String fileOrServerOrConnection) +44
       DomainModel.Concrete.SqlProductsRepository..ctor(String connectionString) in C:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\SportsStore\DomainModel\Concrete\SqlProductsRepository.cs:16
       WebUI.Controllers.ProductsController..ctor() in C:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\SportsStore\WebUI\Controllers\ProductsController.cs:19
    
    [TargetInvocationException: Uma exceção foi acionada pelo destino de uma chamada.]
       System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) +0
       System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) +86
       System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) +230
       System.Activator.CreateInstance(Type type, Boolean nonPublic) +67
       System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(Type controllerType) +82
    
    [InvalidOperationException: An error occurred while creating a controller of type 'WebUI.Controllers.ProductsController'. If the controller doesn't have a controller factory, ensure that it has a parameterless public constructor.]
       System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(Type controllerType) +189
       System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
       System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +128
       System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +57
       System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
       System.Web.Mvc.MvcHttpHandler.VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext) +61
       System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +111
       System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +40
       System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +7
       WebUI._Default.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\SportsStore\WebUI\Default.aspx.cs:18
       System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
       System.Web.UI.Control.OnLoad(EventArgs e) +99
       System.Web.UI.Control.LoadRecursive() +50
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:2.0.50727.3082; Versão do ASP.NET:2.0.50727.3082

    E a sqlproductsrepository está assim:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using DomainModel.Entities;
    using System.Data.Linq;
    using DomainModel.Abstract;
    
    namespace DomainModel.Concrete
    {
        public class SqlProductsRepository : IProductsRepository
        {
            private Table<Product> productsTable;
            public SqlProductsRepository(string connectionString)
            {
                productsTable = (new DataContext(connectionString)).GetTable<Product>();
            }
    
            public IQueryable<Product> Products
            {
                get { return productsTable; }
            }
        }
    }
    terça-feira, 15 de setembro de 2009 14:20
  • João,

    Este erro:

    Valor inválido para chave 'integrated security'.

    Refere-se a sua string de conexão que deve estar com algum erro.

    Geralmente o valor integrated security de uma string de conexão SQL Server vem seguido do valor SSPI.
    E me paresse que ela pode estar com um problema neste ponto da string.

    Este site pode te ajudar a descobrir o problema: http://www.connectionstrings.com/

    Espero ter ajudado. Qualquer dúvida entre em contato.

    Att,

    Douglas Aguiar
    MCAD, MCT
    • Marcado como Resposta joaoluizbt segunda-feira, 21 de setembro de 2009 11:14
    sábado, 19 de setembro de 2009 14:28