Net6入门MVC的传值的五种方式

MVC从控制器传值到视图一共有五种方式

  1. ViewBag
  2. ViewData
  3. TempData
  4. Session
  5. Model

MVC2用ViewData, MVC3引入ViewBag, ViewBag是用来取代ViewData的升级版
ViewBag的数据只在当前View里面可以访问
TempData是临时数据,读取一次就失效,它可以夸视图访问

1,用VS2022新建一个基于.net6的MVC项目

2,添加一个控制器FirstController如下

public class FirstController : Controller
{
	public IActionResult Index()
	{
		ViewBag.User1 = "张三";
		ViewData["User2"]="李四";
		TempData["User3"]="王五";
		HttpContext.Session.SetString("User4", "赵六");
		object User5 = "田七";
		return View(User5);
	}
}

3,添加对应的视图内容如下

This is First Index

[email protected]

User1=@ViewData["User2"]

User2=@TempData["User3"]

[email protected]("User4")

User5=@Model

这个时候运行会报错,还要在Program.cs引入Session

需要在Program.cs添加如下两句

builder.Services.AddSession();
...
app.UseSession();

PS: Net6的项目没有了Setup.cs这个文件了, 并且Program.cs也是用新的语法写的
最终Program.cs代码如下

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddSession(); //添加Session

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}

app.UseSession();//启用Session

app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

运行项目, 打开http://localhost:5224/first/index就可以看到页码上显示的值了

类似这样:

This is First Index
User1=张三
User1=李四
User2=王五
User4=赵六
User5=田七

其它视图注意事项:

@Html.Raw§表示对p不进行HTML编码, 例如:

  • The item is: @Html.Raw(p)
  • 控制器可以返回本视图,也可以返回其他视图:
    public ActionResult Index()
    {
    ViewBag.Message_ViewBag = “I am viewbag”;
    ViewData[“Message_ViewData”] = “I am viewdata”;

    return View(“About”);
    }
    当我们需要返回指定完全不同目录结构中的视图时,可以这样使用~符号来提供视图的完整路径来返回:
    return View(“~/Views/Home/About.cshtml”);

    你可能感兴趣的:(mvc)