Core Mvc传值ViewData、ViewBag和return view(model)
https://www.cnblogs.com/wskxy/p/9318123.html
先定义一个Model类Student
namespace Lession.Models { public class Student { public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } } }
控制器如下:
using Lession.Models; using Microsoft.AspNetCore.Mvc; namespace Lession.Controllers { public class TestController : Controller { public IActionResult Index() { ViewData["name"] = "kxy"; ViewData["sex"] = "男"; ViewData["age"] = 22; ViewBag.Name = "kxy"; ViewBag.Sex = "男"; ViewBag.Age = 22; Student student = new Student() { Name="kxy",Age=22,Sex="男"}; return View(student); } } }
视图如下:
<body> @*ViewData是进行静态数据传递*@ @ViewData["name"] @ViewData["sex"] @ViewData["age"] <br /> @*ViewBag是对ViewData的封装,进行动态数据传递*@ @ViewBag.Name @ViewBag.Sex @ViewBag.Age <br /> @*Model也是进行动态数据传递,需要控制器return一个model*@ @Model.Name @Model.Age @Model.Sex </body>
在这里,可以对Model进行类型定义,在视图上方加入
@model Lession.Models.Student
这样,就可以在书写Model的时候自动补全属性
也可以使用后台语法添加控件,并利用model显示数据
@*使用后台语法添加控件,利用lambda表达式输出内容,这里的m指的就是上面定义的model*@ @Html.TextBoxFor(m => m.Name) @Html.TextBoxFor(m => m.Sex) @Html.TextBoxFor(m => m.Age)
且这个控件的Id和Name属性的值均为Student对应的属性名称
即
@Html.TextBoxFor(m => m.Name)
对应生成
<input id="Name" name="Name" type="text" value="kxy">
2.特性DisPlayName
这个特性可以添加在类的属性上面,做属性名称解释
如:在Name上面添加特性DisPlayName
using System.ComponentModel;
namespace Lession.Models { public class Student { [DisplayName("这里是kxy的名字")] public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } } }
视图代码:
@*输出属性的特性DisplayName*@ @Html.LabelFor(m => m.Name)
结果:
编译生成:<label for="Name">这里是kxy的名字</label>