mvc 传值 html,asp.net mvc 项目后台向页面传值

一直想整理一下这个内容,今天终于有空(kun nan)了。

传值方式

强类型传值:ViewModel

弱类型传值:ViewData和ViewBag

强类型参数传值-ViewModel

后端和页面使用同一个模型进行强类型传值,可以很好的避免拼写错误,IDE也能更好的进行动态感知:

// controller

public IActionResult Index()

{

var User = new User

{

Username="kingofyongchun",

RealName="叶问",

};

ViewData["title"] = "传值测试";

return View(User);

}

@{

Layout = null;

}

@model TestProject.ViewModels.User

@ViewData["title"]

viewmodel

username: @Model.Username

realname: @Model.RealName

User类可以是任何类,不过官方建议将其和数据库实体类分开;推荐的做法是在你的mvc工程中新建ViewModel命名空间;将视图模型全部写在下面。

User类最好是POCO类(Plain Old CLR Object), 只含属性,不含方法

值以参数的方式传递给View方法

View中首先用@model定义类型

使用@Model.xxx拿到实际值。

弱类型数值传递

弱类型数据的适用情形举例:

27d9afe98af0

image.png

ViewData 属性是弱类型对象的字典。

ViewBag 属性是 ViewData 的包装器,为基础 ViewData 集合提供动态属性。

对于 ViewData 和 ViewBag,键查找都不区分大小写。

一些程序员压根不使用弱类型传递,他们认为这非常容易出错,见仁见智吧。

ViewData

ViewData本质是字典,其Key为自定义的string,如上面例子的title

传递字符串时,客户端取出时不需要转换,否则都需要类型转换。

public IActionResult SomeAction()

{

ViewData["Greeting"] = "Hello";

ViewData["Address"] = new Address()

{

Name = "Steve",

Street = "123 Main St",

City = "Hudson",

State = "OH",

PostalCode = "44236"

};

return View();

}

@{

// 非字符参数需要casting转换

var address = ViewData["Address"] as Address;

}

// string类型无需转换

@ViewData["Greeting"] World!

@address.Name

@address.Street

@address.City, @address.State @address.PostalCode

控制器中也可以使用[ViewData]特性声明

public class TestController: Controller

{

[ViewData]

public string Message { get; set; }= "what a killing hot day!";

// GET: //

public IActionResult Index()

{

var User = new User

{

Username="kingofyongchun",

RealName="叶问",

};

ViewData["title"] = "传值测试";

ViewBag.Guest = "泰森";

return View(User);

}

}

@{

Layout = null;

}

@model BioVR.Entities.Models.User

@ViewData["title"]

ViewModel

username: @Model.Username

realname: @Model.RealName

ViewData

@ViewData["Message"]

ViewBag

welcome @ViewBag.Guest !

ViewBag

ViewBag是“动态强类型”,无需转换

ViewBag.User = new User

{

RealName="泰森"

};

return View();

ViewBag

welcome @ViewBag.User.RealName !

ViewBag和ViewData在底层共用数据,因此两者可以混合使用

@{

Layout = "/Views/Shared/_Layout.cshtml";

ViewBag.Title = "About Contoso";

ViewData["Description"] = "Let us tell you about Contoso's philosophy and mission.";

}

@ViewData["Title"]

...

ViewData 和 ViewBag 之间差异的摘要

27d9afe98af0

image.png

传值至javascript

这种需求也是非常常见的,有两种方法

使用隐藏标签:

if ($("#errorInfo").val()) {

showNofity($("#errorInfo").val(), "danger");

};

隐藏标签也可以使用TagHelper轻松定义:

@Html.HiddenFor(x=>x.MyProperty)

直接获取(最方便)

var username = '@Model.Username';

//注意:viewbag或者viewdata直接这样拿会出现乱码

@*var guestname = '@ViewBag.User.RealName'*@

var guestname = '@Html.Raw(@ViewBag.User.RealName)';

alert(username + "/"+guestname);

注意,上面如果直接从js获取ViewData或者ViewBag数据将出现乱码,而要经过@Html.Raw转换才可以。

ajax获取

这个就不推荐了,spa用这个方法获取,mvc就没这个必要了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值