2012-02-21 22 views
5

Estoy intentando usar mi modelo en la vista de maquinilla de afeitar y estoy obteniendo el error especificado anteriormente. El código predeterminado (Account \ ChangePassword.cshtml, ... etc) generado en MVC3 que contiene la palabra clave @model está funcionando bien, solo mi nueva vista está teniendo el problema.MVC3: Mensaje de error del compilador: CS0103: El nombre 'modelo' no existe en el contexto actual

Mi código en el archivo cshtml es el siguiente:

@model VidLib.Models.LogedInUsersModel 


@{ 
    ViewBag.Title = "LogedInUsers"; 
} 

<h2>LoggedInUsers</h2> 

@foreach (MembershipUser user in model.GetUsers()) 
{ 
    <p>Name: @user.UserName 
    </p> 
} 

Mi código de modelo es el siguiente:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Security; 
using System.ComponentModel.DataAnnotations; 

namespace VidLib.Models 
{ 
    public class LogedInUsersModel 
    { 
     public MembershipUserCollection GetUsers() 
     { 
      return Membership.GetAllUsers(); 
     } 

    } 

} 

El error que estoy recibiendo es el siguiente:

Server Error in '/VTest' Application. 
-------------------------------------------------------------------------------- 

Compilation Error 
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0103: The name 'model' does not exist in the current context 

Source Error: 



Line 8: <h2>LoggedInUsers</h2> 
Line 9: 
Line 10: @foreach (MembershipUser user in model.GetUsers()) 
Line 11: { 
Line 12: <p>Name: @user.UserName 


Source File: d:\test projects\VidLib\VidLib\Views\Administrator\LogedInUsers.cshtml Line: 10 



Show Detailed Compiler Output: 


C:\WINDOWS\system32> "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\csc.exe" /t:library /utf8output /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Routing\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Routing.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.ApplicationServices\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.ApplicationServices.dll" /R:"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vtest\9fce5a68\47e852d4\assembly\dl3\81c380d9\4b4be05b_5ff0cc01\VidLib.DLL" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Helpers\v4.0_1.0.0.0__31bf3856ad364e35\System.Web.Helpers.dll" /R:"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel\v4.0_4.0.0.0__b77a5c561934e089\System.ServiceModel.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll" /R:"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vtest\9fce5a68\47e852d4\App_global.asax.4-dk6yw3.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.DynamicData\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.DynamicData.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.WorkflowServices\v4.0_4.0.0.0__31bf3856ad364e35\System.WorkflowServices.dll" /R:"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vtest\9fce5a68\47e852d4\assembly\dl3\09b97a44\38235bb7_32e5cc01\EntityFramework.DLL" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Services\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Activities\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Activities.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Web\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Web.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Mvc\v4.0_3.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Activities\v4.0_4.0.0.0__31bf3856ad364e35\System.Activities.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Abstractions\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Abstractions.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages\v4.0_1.0.0.0__31bf3856ad364e35\System.Web.WebPages.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.IdentityModel\v4.0_4.0.0.0__b77a5c561934e089\System.IdentityModel.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Extensions\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Extensions.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Deployment\v4.0_1.0.0.0__31bf3856ad364e35\System.Web.WebPages.Deployment.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Activation\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Activation.dll" /R:"C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll" /out:"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vtest\9fce5a68\47e852d4\App_Web_logedinusers.cshtml.e8fa2554.wfm-mxw5.dll" /D:DEBUG /debug+ /optimize- /w:4 /nowarn:1659;1699;1701 /warnaserror- "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vtest\9fce5a68\47e852d4\App_Web_logedinusers.cshtml.e8fa2554.wfm-mxw5.0.cs" "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vtest\9fce5a68\47e852d4\App_Web_logedinusers.cshtml.e8fa2554.wfm-mxw5.1.cs" 


Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1 
Copyright (C) Microsoft Corporation. All rights reserved. 

d:\test projects\VidLib\VidLib\Views\Administrator\LogedInUsers.cshtml(10,34): error CS0103: The name 'model' does not exist in the current context 





Show Complete Compilation Source: 


Line 1: #pragma checksum "D:\test projects\VidLib\VidLib\Views\Administrator\LogedInUsers.cshtml" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "1D2E7C5249B30EC171BB04A575153072" 
Line 2: //------------------------------------------------------------------------------ 
Line 3: // <auto-generated> 
Line 4: //  This code was generated by a tool. 
Line 5: //  Runtime Version:4.0.30319.1 
Line 6: // 
Line 7: //  Changes to this file may cause incorrect behavior and will be lost if 
Line 8: //  the code is regenerated. 
Line 9: // </auto-generated> 
Line 10: //------------------------------------------------------------------------------ 
Line 11: 
Line 12: namespace ASP { 
Line 13:  using System; 
Line 14:  using System.Collections.Generic; 
Line 15:  using System.IO; 
Line 16:  using System.Linq; 
Line 17:  using System.Net; 
Line 18:  using System.Web; 
Line 19:  using System.Web.Helpers; 
Line 20:  using System.Web.Security; 
Line 21:  using System.Web.UI; 
Line 22:  using System.Web.WebPages; 
Line 23:  using System.Web.Mvc; 
Line 24:  using System.Web.Mvc.Ajax; 
Line 25:  using System.Web.Mvc.Html; 
Line 26:  using System.Web.Routing; 
Line 27:  
Line 28:  
Line 29:  public class _Page_Views_Administrator_LogedInUsers_cshtml : System.Web.Mvc.WebViewPage<VidLib.Models.LogedInUsersModel> { 
Line 30:   
Line 31: #line hidden 
Line 32: 
Line 33:   
Line 34:   public _Page_Views_Administrator_LogedInUsers_cshtml() { 
Line 35:   } 
Line 36:   
Line 37:   protected ASP.global_asax ApplicationInstance { 
Line 38:    get { 
Line 39:     return ((ASP.global_asax)(Context.ApplicationInstance)); 
Line 40:    } 
Line 41:   } 
Line 42:   
Line 43:   public override void Execute() { 
Line 44: 
Line 45: WriteLiteral("\r\n\r\n"); 
Line 46: 
Line 47: 
Line 48:    
Line 49:    #line 4 "D:\test projects\VidLib\VidLib\Views\Administrator\LogedInUsers.cshtml" 
Line 50:  
Line 51:  ViewBag.Title = "LogedInUsers"; 
Line 52: 
Line 53: 
Line 54:    
Line 55:    #line default 
Line 56:    #line hidden 
Line 57: WriteLiteral(" \r\n<h2>LoggedInUsers</h2>\r\n\r\n"); 
Line 58: 
Line 59: 
Line 60:    
Line 61:    #line 10 "D:\test projects\VidLib\VidLib\Views\Administrator\LogedInUsers.cshtml" 
Line 62: foreach (MembershipUser user in model.GetUsers()) 
Line 63: { 
Line 64: 
Line 65:    
Line 66:    #line default 
Line 67:    #line hidden 
Line 68: WriteLiteral(" <p>Name: "); 
Line 69: 
Line 70: 
Line 71:    
Line 72:    #line 12 "D:\test projects\VidLib\VidLib\Views\Administrator\LogedInUsers.cshtml" 
Line 73:   Write(user.UserName); 
Line 74: 
Line 75:    
Line 76:    #line default 
Line 77:    #line hidden 
Line 78: WriteLiteral(" \r\n </p>\r\n"); 
Line 79: 
Line 80: 
Line 81:    
Line 82:    #line 14 "D:\test projects\VidLib\VidLib\Views\Administrator\LogedInUsers.cshtml" 
Line 83: } 
Line 84: 
Line 85:    
Line 86:    #line default 
Line 87:    #line hidden 
Line 88: WriteLiteral("\r\n"); 
Line 89: 
Line 90: 
Line 91:   } 
Line 92:  } 
Line 93: } 
Line 94: 





-------------------------------------------------------------------------------- 
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1 

Respuesta

6

verifique el código en su archivo de vista (LogedInUsers.cshtml). Se del modelo, no modela

@foreach (usuario MembershipUser en Model.GetUsers()) {

+0

Ahora iam obtiene null expection cuando se usa Model en lugar de modelo. – coolcake

+0

debe manejar nulo si no hay datos. Es decir, Membership.GetAllUsers() no recupera ningún dato de rol. así que maneje la excepción nula. – MikMark

1

Había dos problemas en mi aplicación.

1) El modelo debería haberse utilizado en Ver en lugar de modelo como lo sugirió Mik-Mark. 2) Tengo que pasar mi modelo a Ver en el controlador que no estaba haciendo.

[Authorize(Roles = "Admin")] 
public ActionResult LogedInUsers() 
{ 
     var model = new LogedInUsersModel(); 
     return View(model); 
} 
2

Supongo que está devolviendo varios registros de su modelo. No he intentado vincular el modelo a un método, no estoy seguro de que funcione. Intentaría una propiedad. El modelo

public class User 
{ 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
} 

la ViewModel

public class UserViewModel { get; set; } 
{ 
    public List<User> UserList { get; set; } 
} 

el controlador

DBContext db = new DBContext(); 

public ViewResult() 
{ 
    List<Users> users = db.Users.Where(m => m.LoggedIn == true).ToList(); 

    UserViewModel userVM = new UserViewModel(); 

    userVM.UserList = users; 

    return View(userVM); 
} 

la vista

@model MyUserApp.ViewModels.UserViewModel 

foreach(User u in Model.Users) 
{ 
    Name: @u.UserName<br/> 
} 

Trate de unión a las propiedades en lugar de métodos. También debe considerar el enlace a un modelo de vista en lugar de su modelo que está vinculado a la base de datos. Cuando vincula la vista directamente al repositorio o el modelo de almacén de datos, está estrechamente vinculado el modelo a la vista. El modelo está ligado tanto a la vista como a la base de datos (suponiendo que esté utilizando el marco de entidad y las anotaciones de datos). Esto puede causar una gran cantidad de errores de validación de datos cuando intenta validar un modelo contra la vista y la base de datos. Por ejemplo, si estos atributos se añaden al modelo

[Required(ErrorMessage="User name is required")] 
[StringLenth(50)] // this causes validation against the database and the view 
public string UserName { get; set; } 

Como regla general, el uso de la anotación de datos para ayudar a definir los atributos de la base de datos en su modelo y luego hacer la validación de la interfaz de usuario en el modelo de vista. Si agrega los mismos atributos al modelo de vista, solo está validando contra la vista.

Cuestiones relacionadas