RuntimeBinderException:'object'不包含'Name'的定义

时间:2015-01-17 18:32:39

标签: c# asp.net-mvc asp.net-mvc-4

我是MVC C#应用程序的新手。我正在从Controller向View发送学生对象。 Student类在模型中定义。这是Controller类的代码。 StudentController.cs

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

namespace MvcApplication.Controllers
{
   public class StudentController : Controller
   {
       //
       // GET: /Student/

       public ViewResult Get()
       {
           Student s = new Student();
            s.Name = "Ali";
            s.SID = "45";            
            return View(s);
       }
   }
}

她是我的Model class Student.cs

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication.Models
{
    class Student
    {
        public string Name { get; set; }
        public string SID { get; set; }
    }
}

这是我的View类get.cshtml

@{
     ViewBag.Title = "get";
 }

 <h2>get</h2>
 <p> @Model.Name </p>
 <p> @Model.SID </p>

当我在http://localhost:16206/Student/get点击请求时 发生以下异常。

RuntimeBinderException: 'object' does not contain a definition for 'Name'

不知道如何修复它。

2 个答案:

答案 0 :(得分:2)

您需要在页面顶部显示模型声明:

@model MvcApplication.Models.Student
@{
     ViewBag.Title = "get";
 }
...

此外,您可能需要声明Student模型public

答案 1 :(得分:0)

基本上在ASP.MVC中,您有三种方法可以将信息从控制器传递到视图。您可以使用:

  • ViewBag
  • 动态视图
  • 强类型视图

中间选项很少使用,但我认为它总是值得知道。在您的情况下,它看起来如下:

@model dynamic

@{
    ViewBag.Title = "get";
}

<h2>get</h2>
<p> @Model.Name </p>
<p> @Model.SID </p>

另一方面,强类型视图看起来像Omri提到的那样:

@model MvcApplication.Models.Student
@{
     ViewBag.Title = "get";
}

<h2>get</h2>
<p> @Model.Name </p>
<p> @Model.SID </p>

正如Omri所提到的 - 非常重要的是模型类应该公开:

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication.Models
{
    public class Student
    {
        public string Name { get; set; }
        public string SID { get; set; }
    }
}

正如我所写,您也可以使用ViewBag而不是模型。然后它看起来如下:

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

namespace MvcApplication.Controllers
{
   public class StudentController : Controller
   {
       //
       // GET: /Student/

       public ViewResult Get()
       {
            ViewBag.Name = "Ali";
            ViewBag.SID = "45";            
            return View();
       }
   }
}

并查看:

@{
     ViewBag.Title = "get";
}

<h2>get</h2>
<p> @ViewBag.Name </p>
<p> @ViewBag.SID </p>

还有更多选项,如ViewData,TempData。你可以在这里阅读: