MVC3:编译器错误消息:CS0103:当前上下文中不存在名称'model'



我试图在剃刀视图中使用我的模型,但我得到了上面指定的错误。MVC3中生成的包含@model关键字的默认代码(Account\ChangePassword.cs.html,…等)运行良好,只有我的新视图出现问题。

我在cshtml文件中的代码如下:

@model VidLib.Models.LogedInUsersModel

@{
    ViewBag.Title = "LogedInUsers";
}
<h2>LoggedInUsers</h2>
@foreach (MembershipUser user in model.GetUsers())
{ 
   <p>Name: @user.UserName 
   </p>
}

我的型号代码如下:

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

我得到的错误如下:

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 projectsVidLibVidLibViewsAdministratorLogedInUsers.cshtml    Line: 10 

Show Detailed Compiler Output:

C:WINDOWSsystem32> "C:WINDOWSMicrosoft.NETFrameworkv4.0.30319csc.exe" /t:library /utf8output /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.Routingv4.0_4.0.0.0__31bf3856ad364e35System.Web.Routing.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystemv4.0_4.0.0.0__b77a5c561934e089System.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.ApplicationServicesv4.0_4.0.0.0__31bf3856ad364e35System.Web.ApplicationServices.dll" /R:"C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesvtest9fce5a6847e852d4assemblydl381c380d94b4be05b_5ff0cc01VidLib.DLL" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.Helpersv4.0_1.0.0.0__31bf3856ad364e35System.Web.Helpers.dll" /R:"C:WINDOWSMicrosoft.NETFrameworkv4.0.30319mscorlib.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Configurationv4.0_4.0.0.0__b03f5f7f11d50a3aSystem.Configuration.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Drawingv4.0_4.0.0.0__b03f5f7f11d50a3aSystem.Drawing.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.ServiceModelv4.0_4.0.0.0__b77a5c561934e089System.ServiceModel.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.ComponentModel.DataAnnotationsv4.0_4.0.0.0__31bf3856ad364e35System.ComponentModel.DataAnnotations.dll" /R:"C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesvtest9fce5a6847e852d4App_global.asax.4-dk6yw3.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_32System.Datav4.0_4.0.0.0__b77a5c561934e089System.Data.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Data.DataSetExtensionsv4.0_4.0.0.0__b77a5c561934e089System.Data.DataSetExtensions.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Corev4.0_4.0.0.0__b77a5c561934e089System.Core.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.DynamicDatav4.0_4.0.0.0__31bf3856ad364e35System.Web.DynamicData.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Runtime.Serializationv4.0_4.0.0.0__b77a5c561934e089System.Runtime.Serialization.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.WorkflowServicesv4.0_4.0.0.0__31bf3856ad364e35System.WorkflowServices.dll" /R:"C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesvtest9fce5a6847e852d4assemblydl39b97a4438235bb7_32e5cc01EntityFramework.DLL" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.Servicesv4.0_4.0.0.0__b03f5f7f11d50a3aSystem.Web.Services.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILMicrosoft.CSharpv4.0_4.0.0.0__b03f5f7f11d50a3aMicrosoft.CSharp.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.ServiceModel.Activitiesv4.0_4.0.0.0__31bf3856ad364e35System.ServiceModel.Activities.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.ServiceModel.Webv4.0_4.0.0.0__31bf3856ad364e35System.ServiceModel.Web.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.Mvcv4.0_3.0.0.0__31bf3856ad364e35System.Web.Mvc.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Activitiesv4.0_4.0.0.0__31bf3856ad364e35System.Activities.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.Abstractionsv4.0_4.0.0.0__31bf3856ad364e35System.Web.Abstractions.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Data.Entityv4.0_4.0.0.0__b77a5c561934e089System.Data.Entity.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Xml.Linqv4.0_4.0.0.0__b77a5c561934e089System.Xml.Linq.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_32System.Webv4.0_4.0.0.0__b03f5f7f11d50a3aSystem.Web.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.WebPagesv4.0_1.0.0.0__31bf3856ad364e35System.Web.WebPages.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.IdentityModelv4.0_4.0.0.0__b77a5c561934e089System.IdentityModel.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.Extensionsv4.0_4.0.0.0__31bf3856ad364e35System.Web.Extensions.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Xmlv4.0_4.0.0.0__b77a5c561934e089System.Xml.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Web.WebPages.Deploymentv4.0_1.0.0.0__31bf3856ad364e35System.Web.WebPages.Deployment.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.ServiceModel.Activationv4.0_4.0.0.0__31bf3856ad364e35System.ServiceModel.Activation.dll" /R:"C:WINDOWSMicrosoft.NetassemblyGAC_32System.EnterpriseServicesv4.0_4.0.0.0__b03f5f7f11d50a3aSystem.EnterpriseServices.dll" /out:"C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesvtest9fce5a6847e852d4App_Web_logedinusers.cshtml.e8fa2554.wfm-mxw5.dll" /D:DEBUG /debug+ /optimize- /w:4 /nowarn:1659;1699;1701 /warnaserror-  "C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesvtest9fce5a6847e852d4App_Web_logedinusers.cshtml.e8fa2554.wfm-mxw5.0.cs" "C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesvtest9fce5a6847e852d4App_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 projectsVidLibVidLibViewsAdministratorLogedInUsers.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 projectsVidLibVidLibViewsAdministratorLogedInUsers.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("rnrn");
Line 46:   
Line 47:   
Line 48:               
Line 49:               #line 4 "D:test projectsVidLibVidLibViewsAdministratorLogedInUsers.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("    rn<h2>LoggedInUsers</h2>rnrn");
Line 58:   
Line 59:   
Line 60:               
Line 61:               #line 10 "D:test projectsVidLibVidLibViewsAdministratorLogedInUsers.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 projectsVidLibVidLibViewsAdministratorLogedInUsers.cshtml"
Line 73:          Write(user.UserName);
Line 74:   
Line 75:               
Line 76:               #line default
Line 77:               #line hidden
Line 78:   WriteLiteral(" rn   </p>rn");
Line 79:   
Line 80:   
Line 81:               
Line 82:               #line 14 "D:test projectsVidLibVidLibViewsAdministratorLogedInUsers.cshtml"
Line 83:   }
Line 84:   
Line 85:               
Line 86:               #line default
Line 87:               #line hidden
Line 88:   WriteLiteral("rn");
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 

检查视图(LogedInUsers.cs.html)文件中的代码。这是模型,而不是模型

@foreach(Model.GetUsers()中的MembershipUser用户){

我假设您正在从模型中返回多条记录。我还没有尝试将模型绑定到方法,我不确定它是否有效。我会尝试一处房产。型号

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

ViewModel

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

控制器

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);
}

视图

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

尝试绑定到属性而不是方法。您还应该考虑绑定到ViewModel,而不是绑定到数据库的Model。当您将视图直接绑定到数据存储模型或存储库时,您将模型与视图紧密耦合。然后将模型绑定到视图和数据库(假设您使用的是实体框架和数据注释)。当您尝试根据视图和数据库验证一个模型时,这可能会导致大量数据验证错误。例如,如果将这些属性添加到模型中

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

通常,使用数据注释属性来帮助定义模型中的数据库,然后在ViewModel中进行UI验证。如果将相同的属性添加到视图模型中,则仅针对视图进行验证。

我的应用程序中有两个问题。

1) 应该在View中使用模型,而不是像Mik-Mark建议的那样使用模型。2) 我必须将我的模型传递给控制器中的View,而我没有这样做。

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

最新更新