【MVC】传值大全参考
程序员文章站
2022-04-02 11:52:19
...
写在前面的
传值的问题在MVC中也算是一个比较丰富的机制,我们可以借助各种方式和工具组件在Controller和View中来回传递参数。常用的有这么几种方式,Controller<—->View;Action<—->Action;以及Controller<—->Controller
传参方式
Controller与View之间
ViewBag
- ViewBag比较灵活,可以自定义属性,和ViewData类似。但是ViewBag的好处就是可以通过HtmlHelper的TextBox来自动实现数据绑定。
//在控制器中
ViewBag.mvcname= "myfirstframe";
ViewBag.mvcads= "fast";
//在页面中
<div>
@Html.TextBox("mvcname")
@ViewBag.mvcads
</div>
同样,viewBag还可以用来拼页面,这样,我们就可以把所有的页面写在Controller里面,简化View的页面代码,如图:
在页面中直接使用拼接好的页面即可:
ViewData
- 和ViewBag的用法相差不是很多,ViewData的形式采用Key-Value来进行识别并显示Value值。
//在controller中
String mvc ="what an ammazing frame is!"
ViewData["stringMvc"]=mvc;
//在页面中
<div>
<font>How do you like MVC?</font>
</div>
<div>
<font>@ViewData["stringMvc"]</font>
</div>
JS
- 通过JS传值的方法就比较多了,我们最常用的是AJAX,其次还有通过ulr来传值
Ajax
- 使用AJAX传值的话是一种比较方便的方式,主要是运用了JQ中封装好的一些传值方法,来参与View与Controller之间的相互传值。
//页面中的方法
/*ajax有一套自己的固定写法,如下所示,只要按照固定的格式,就可以实现前后台相互传值*/
$(document).ready(function () {
$.ajax({
//指定Url,格式“Controller名字/Action方法名”
url: 'SubmitSuccess/GetAnnounce',
//传值方式,post/get
type: 'get',
//指定返回值类型
dataType: 'json',
//返回值data如果不是空值,也就是返回成功,那么执行function中的代码
success: function (data) {
for (var i = 0; i < data.length; i++) {
$(".content" + i).html(data[i].announceContent);
}
executeQueryName();
}
});
//在SubmitSusseccController中是这样的形式
public ActionResult GetAnnounce()
{
List<t_announce> data = new List<t_announce>();
SubmitSuccessBLL getallannounce = new SubmitSuccessBLL();
data = getallannounce.GetAnnounce();
return Json(data, JsonRequestBehavior.AllowGet);
}
URL
- 再有就是通过地址栏中的url进行传值了,网上有好多已经封装好的JS代码,这里就不再展示了,我用一个简单的例子来展示一下简单的获取原理。
//rul传值可以灵活运用,可以在View与Controller之间,也可以是view与view之间
//我们要做的就是把地址栏的rul改变,然后再获取并修改
//html片段
<body>
<div id="mvcurl">MVC URL GET</div>
<body>
//如何将div的innerHtml获取
<script type="text/javascript">
function geturl(){
var prop = document.getElementById("mvcurl");
//获取内容
var propdoc= prop.innerHTML;
//将地址栏rul添加参数
var url = "mvcurl" + "?" + "content" + propdoc;
window.location.assign(url);
}
</script>
在执行完上面的方法之后,地址栏的链接会变成:
我们在另一个页面或者后台怎么获取这个innerHTML呢?
<script type="text/javascript">
var url = location.href;
//将链接地址以"?"划分成为两部分,获取第二部分
var url2 = url.split("?")[1];
//将链接的第二部分再以“=”划分,取第二部分
var url3= url2.split("=")[1];
//这个时候我们就获取到了“MVC URL GET”的内容
var content = url3;
</script>
Action与Action之间(Controller内部)
- 如果需要在Controller内部传值的话,就需要用到TempData,和ViewData一样,只不过ViewData做不到不同Action之间的传值罢了。
public ActionResult Indexa(){
TempData["mvc"]="mvc oh yellllllllll";
return View();
}
public ActionResult Indexb(){
String mvc = TempData["name"].toString;
return View();
}
总结
还有一种controller与controller之间传值的方法,由于不常用,暂时在这里就不做说明了,总之掌握以上常用的方法,会很方便的我们对页面的调用和传值。
上一篇: MVC实现 模型绑定传值
下一篇: Qt 求平方根
推荐阅读
-
MVC5控制器传值的三种方式(ViewData,ViewBag,TempData),刚刚学习MVC5的新手,希望各位大神多多指教
-
如何不用Ajax向后台传值 Spring MVC
-
Asp.net MVC中Controller向View传值
-
ASP.NET MVC Action向视图传值之匿名类型
-
ASP.NET MVC controller 之间传JS值
-
详解ASP.NET MVC 下拉框的传值的两种方式
-
Android 入门第十讲02-广播(广播概述,使用方法(系统广播,自定义广播,两个activity之间的交互和传值),EventBus使用方法,数据传递,线程切换,Android的系统广播大全)
-
Asp.net MVC 3中Session与ViewBag传值到Js中
-
.NET MVC传值
-
我们使用了百度编译器后再MVC传值出现的问题。