dotNET5的MVC页面传值方式总结

365bet亚洲版网址 📅 2025-10-13 12:04:41 ✍️ admin 👀 2853 ❤️ 353
dotNET5的MVC页面传值方式总结

开始标记写入响应。在用户提交窗体时,将由某个操作方法(指定Controller的某个Action)处理该请求。

(使用using关闭form,下面不再说明。)

2. 使用Html.BeginRouteForm(...)方法提交表单

@Html.BeginRouteForm("路由名称", new { controller = "userinfo", action="save", userID = Model.UserID, userName = Model.UserName }, FormMethod.Post)

{

表单内容

...

}

说明:同Html.BeginForm(),但使用路由方式提交表单,同时参数也不同。

3. 传统Form表单的Action属性提交

表单内容

...

说明:使用传统html form原生标记。

4. 使用Ajax方式提交表单, Ajax.BeginForm(...)

@Ajax.BeginForm("actionName", new AjaxOptions { Url="",OnSuccess="",HttpMethod="get" })

{

表单内容

...

}

说明:使用异步方式提交form表单。

5. Jquery和Ajax提交表单

省略... 不在文章讨论范围。

6. 表单参数传递

6.1 全参数传递

[HttpPost]

public ActionResult Save(string username,int sex,int age,string dept)

说明:html标签name和参数名需相同。

6.2 实体传参

[HttpPost]

public ActionResult Save(UserInfoViewModel item)

说明:页面使用@model绑定类型

6.3 表单集合传参

[HttpPost]

public ActionResult Save(FormCollection fc)

说明:需解析FormCollection,如:

UserInfoViewModel userInfo = new UserInfoViewModel();

TryUpdateModel(userInfo, fc);

6.4 传统方式

使用HttpContext,在MVC中我们同样可以使用以下对象:

Application,Server,Session,Request,Response,Cache ...

四、Controller向Controller传值(Action之间传值)

1. RedirectToAction

1.1 传递实体对象

public ActionResult Index()

{

return RedirectToAction("Index", "Home", new UserInfoViewModel { UserID = Guid.NewGuid(), UserName = "zhangsan", Sex = 1, Age = 20, Dept = "hr" });

}

说明:在UserInfoController中,在页面加载时,新建一个实体类型,并跳转至首页。

接收:

public class HomeController : Controller

{

public ActionResult Index(UserInfoViewModel model)

{

//处理model的值

//...

1.2 传递普通参数

public ActionResult Index()

{

return RedirectToAction("Index", "Home", new { UserID = Guid.NewGuid(), UserName = "zhangsan"});

}

接收:

public class HomeController : Controller

{

public ActionResult Index(string userID,string userName)

{

//处理userID, userName的值

//...

TempData

TempData["userName"] = "zhangsan";

return RedirectToAction("Index2");

在Index2中接收:

string userName = TempData["userName"].ToString();

说明:TempData可以在同Controller中不同Action之间传递,并且具有‘一次访问’的特质。使用时要特别注意。

五、与WebForms传值的对比

后台不能通过非提交方式获取某个页面元素的值,因为没有‘服务器控件’;MVC使用原生Http,是【无状态】的。

不能使用(也没有)ViewState。

使用特有的机制传值(ViewData,ViewBag...等等)。

六、MVC 向页面传值方式总结

总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是:

ViewBag

ViewData

TempData

向普通View页面传一个Model对象

向强类型页面传传一个Model对象

用一个ViewModel对象解决所有问题

首先我们需要明确的是我们从controller向view传值的时候,这些方式分别处于什么样的地位:

我们一般会向页面传递一个主要的类型的数据,一般是情况下是一个List,如果只有这个,很好办,一个model对象就解决了,但是往往除此之外还会有一些额外的零散的数据需要传递,比如分页的pageIndex,或者pageCount等等,这样的数据用原有的model就无能为力了,这时候,我们就可以用ViewBag、ViewData、TempData来传递这些额外的数据。

视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类。对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测。如:

control控制器

public

ActionResult Index()

{

List

colors = new

List();

colors.Add("red");

colors.Add("green");

colors.Add("blue");

ViewData["listColors"]

= colors;

ViewData["dateNow"]

= DateTime.Now;

ViewData["name"]

= "Hajan";

ViewData["age"]

= 25;

return

View();

control 控制器

public

ActionResult Index()

{

List

colors = new

List();

colors.Add("red");

colors.Add("green");

colors.Add("blue");

ViewBag.ListColors = colors;

//colors

is List

ViewBag.DateNow

= DateTime.Now;

ViewBag.Name

= "Hajan";

ViewBag.Age

= 25;

return

View();

}

你和上面的对比 你看见了不同吗?

View

对应前台视图:

1.使用ViewData

My name is @ViewData["name"] ,


I like the following colors:

    @foreach (var color in ViewData["listColors"] as List)

    {

  • @color
  • }

@ViewData["dateNow"]

2.使用ViewBag

My name is < b>@ViewBag.Name, @ViewBag.Age years old.


I like the following colors:

    @foreach (var color in ViewBag.ListColors)

    {

  • @color
  • }

@ViewBag.DateNow

ViewBag、ViewData 和 TempData 的区别:

ViewData 和 TempData 都可以传递弱类型数据,区别如下:

ViewData 只在当前 Action 中有效,生命周期和 View 相同;

TempData 的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。

-TempData 一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。

ViewBag

我们可以认为 ViewBag=ViewData+Dynamic wrapper around the ViewData ,接下来你就可以体会到这个公式的含义了。

1、conroller向view传值

2、view向view传值:

3、利用ViewBag传递一个对象:

ViewData

1、ViewData的基本用法

2、ViewData 转换成 ViewBag:

3、ViewBag 转换成 ViewData:

TempData

TempData用于在Redirect的时候保存数据,ViewData、ViewBag在跳转后就会变成null,但是TempData不会,下面是TempData的用法示例:

public ActionResult Index()

{

var model = new Review()

{

Body = "Start",

Rating=5

};

TempData["ModelName"] = model;

return RedirectToAction("About");

}

public ActionResult About()

{

var model= TempData["ModelName"];

return View(model);

}

普通页面传递model:

//Action代码

public ActionResult Index()

{

Product p = new Product();

p.Name = "Toy";

return View(p);

}

在View中调用的代码:

Product : <%: ((Product)Model).Name %>

向强类型试图传递model

1、WebForm Engine的试图的实现:

//Aciton的代码

public ActionResult Index()

{

Product p = new Product();

p.Name = "Toy";

return View(p);

}

View中的代码

声明类型

<%@ Page Inherits="System.Web.Mvc.ViewPage" %>

直接用Model调用该对象

Product Name: <%: Model.Name %>

2、Razor Engine的实现:

在Razor中声明类型的方式:

@model Mvc3App.Models.Product

在Razor中调用对象的方式:

Product: @Model.Name

相关推荐

365bet足球数据直播 小米汽车发布会文字完整版:人车合一,我心澎湃
365bet娱乐开户 有哪些优秀的库房管理软件?库房管理软件推荐
365bet亚洲版网址 空降《中国新歌声》,娃娃:我只是来向大家问好
365bet亚洲版网址 推荐两款好用的视频压缩工具(在保证画质的情况下最大限度地压制)
365bet足球数据直播 ubuntu中下载软件失败解决方法
365bet娱乐开户 全面解析科学上网天卡的使用与配置
365bet娱乐开户 深度编码器(DeepCoder)项目指南
365bet亚洲版网址 离线下载是什么意思啊?一文带你全面了解离线下载的奥秘
365bet亚洲版网址 怎么写小说?做好这4步,你也能开始写小说 | 经验分享

友情伙伴