我是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'
不知道如何修复它。
答案 0 :(得分:2)
您需要在页面顶部显示模型声明:
@model MvcApplication.Models.Student
@{
ViewBag.Title = "get";
}
...
此外,您可能需要声明Student
模型public
。
答案 1 :(得分:0)
基本上在ASP.MVC中,您有三种方法可以将信息从控制器传递到视图。您可以使用:
中间选项很少使用,但我认为它总是值得知道。在您的情况下,它看起来如下:
@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。你可以在这里阅读: