Usuário com melhor resposta
Erro em exemplo de livro

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...
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
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 -
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);
-
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 -
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()); } } }
:( -
-
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; } } } }
-
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