2015-01-17 3 views
0

Я новичок в приложении MVC C#. Я отправляю студенческий объект из контроллера для просмотра. Класс Student определен в модели. вот код для класса Controller. StudentController.csRuntimeBinderException: 'object' не содержит определения для 'Name'

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

Ее мой класс Модель 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; } 
    } 
} 

Вот мой Посмотреть класс 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' 

Не знаю, как исправить это.

+0

Был мой ответ правильный? Помогает ли вам каким-то образом? – Landeeyo

ответ

2

Вы должны иметь декларацию модели в верхней части страницы:

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

Кроме того, вы можете объявить Student модель public.

0

В основном в ASP.MVC у вас есть три способа передачи информации от контроллера к представлению. Вы можете использовать:

  • ViewBag
  • Динамические представления
  • Сильно типизированных

Средний вариант используется редко, но я думаю, что это всегда стоит знать. В вашем случае это будет выглядеть следующим образом:

@model dynamic 

@{ 
    ViewBag.Title = "get"; 
} 

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

С другой стороны, сильно типизированных вид выглядит как упомянуто Омри:

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

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

Кроме того, как упоминалось Омри - очень важная вещь, класс модель должна быть публичной :

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. Вы можете прочитать об этом здесь:

Смежные вопросы