Core Mvc传值ViewData、ViewBag和return view(model)

2021-04-25 05:28

阅读:718

先定义一个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);
        }

    }
}
技术图片

视图如下:

技术图片
    @*ViewData是进行静态数据传递*@
    @ViewData["name"]
    @ViewData["sex"]
    @ViewData["age"]
    
@*ViewBag是对ViewData的封装,进行动态数据传递*@ @ViewBag.Name @ViewBag.Sex @ViewBag.Age
@*Model也是进行动态数据传递,需要控制器return一个model*@ @Model.Name @Model.Age @Model.Sex
技术图片

  在这里,可以对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)
 对应生成
    


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)

  结果:

    编译生成:


评论


亲,登录后才可以留言!