我在将Razor转换为ASPX时做错了什么?

时间:2012-02-04 23:57:30

标签: c# asp.net-mvc razor

我正在为MVC做一个简单的(我认为)教程。唯一的问题是教程使用Razor,我需要使用ASPX。我正在看的工作使用它。

我花了好几个小时在互联网上寻找可能性,但我仍然收到这个错误:

  

编译错误

     

描述:编译所需资源时发生错误   服务这个请求。请查看以下内容   具体的错误详情并适当修改您的源代码   编译器错误消息:CS1061:'object'不包含定义   对于'名称'而没有扩展方法'名称'接受第一个参数   可以找到'object'类型(你是否错过了using指令或   汇编参考?)源错误:

     

第12行:
  第13行:
  第14行:餐厅:<%:Model.Name%>
  第15行:评级:<%:Model.Rating%>
  第16行:

控制器代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using EdeToFood.Models;

namespace EdeToFood.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";

            var model = new RestaurantReview()
            {
                Name = "Tersiguil's",
                Rating = 9
            };

            return View(model);
        }

        public ActionResult About()
        {
            ViewBag.Location = "Maryland, USA";
            return View();
        }
    }
}

ASPX是:

%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%: ViewBag.Message %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>

    <div >
    Restaurant:  <%: Model.Name %>
    Rating:  <%: Model.Rating %>

    </div>
</asp:Content>

2 个答案:

答案 0 :(得分:5)

如果您想使用强类型视图您必须在此行中定义页面的View Model

Inherits="System.Web.Mvc.ViewPage<TheViewModel>" %>

所以在你的情况下应该是;

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<RestaurantReview>" %>

如果您没有像往常一样指定任何内容,ViewModel将是对象,并且众所周知,它没有NameRating属性。

答案 1 :(得分:0)

我相信你不希望冒号作为脚本分隔符的一部分:

<h2><% ViewBag.Message %></h2>

您还可以使用不同的语法,使用等号作为Response.Write()的快捷方式,例如

<%=DateTime.Now %>

Source