CI中怎么在一个tp5 跨控制器调用中调用另外一个tp5 跨控制器调用的函数

MVC页面不同控制器下的方法调用同一个后台函数 - CSDN博客
MVC页面不同控制器下的方法调用同一个后台函数
尤其是在多语言开发当中,切换语言的时候很有用。关键点就是要找到路径。
比如,我有个_LoginPartial.cshtml,这个页面是网页的公用部分,自己开发的网站,每个页面都会加载这一部分内容。
我在_LoginPartial.cshtml放置了两个radio用于语言切换,我想在点击radio时调用HomeController控制器下的ChangeLanguage()方法,实现语言切换。
但是现在不是光有HomeController控制器,还有AccountController控制器和ManageController控制器,如何在AccountController/ManageController下的显示页面也能调用HomeController下的ChangeLanguage()后台方法?研究了一下解决了,上代码:
在_LoginPartial.cshtml页面写上脚本:
&script type=&text/javascript&&
&&& $(document).ready(function () {
&&&&&&& if (@ViewBag.radioNo==1){&& //ViewBag.radioNo是后台传过来的标示参数
&&&&&&&&&&& $(&input[name='LanguageType']&).eq(0).click();
&&&&&&& else{
&&&&&&&&&&& $(&input[name='LanguageType']&).eq(1).click();
&&& $(document).ready(function () {
&&&&&&& $(&[name='LanguageType']&).change(function () {
&&&&&&&&&&& if(@ViewBag.IsHomePage==1){&&&&&&&& //HomeController的Index页面
&&&&&&&&&&&&//ViewBag.IsHomePage是后台传过来的标示当前是哪种控制器下的页面
&&&&&&&&&&&&&&& $.ajax({
&&&&&&&&&&&&&&&&&&& type: &POST&,
&&&&&&&&&&&&&&&&&&&
url: &Home/ChangeLanguage&,
&&&&&&&&&&&&&&&&&&& data: { LanguageType: $('input[name=LanguageType]:checked').val() },
&&&&&&&&&&&&&&&&&&& dataType: &json&,
&&&&&&&&&&&&&&&&&&& success: function (data) {&&
&&&&&&&&&&&&&&&&&&&&&&& //location.reload();
&&&&&&&&&&&&&&&&&&&&&&& window.location.href=window.location.&//这句是调用完后自动刷新页面
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& });
&&&&&&&&&&& }
&&&&&&&&&&& else if(@ViewBag.IsHomePage==0){&& //HomeController的非Index页面
&&&&&&&&&&&&&&&&&&& $.ajax({
&&&&&&&&&&&&&&&&&&&&&&& type: &POST&,
&&&&&&&&&&&&&&&&&&&&&&& url: &ChangeLanguage&,
&&&&&&&&&&&&&&&&&&&&&&& data: { LanguageType: $('input[name=LanguageType]:checked').val() },
&&&&&&&&&&&&&&&&&&&&&&& dataType: &json&,
&&&&&&&&&&&&&&&&&&&&&&& success: function (data) {&
&&&&&&&&&&&&&&&&&&&&&&&&&&& window.location.href=window.location.
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& });
&&&&&&&&&&&&&&& }
&&&&&&&&&&& else{&&& //ManageController/AccountController等非homecontroller页面,即@ViewBag.IsHomePage=2
&&&&&&&&&&&&&&& $.ajax({
&&&&&&&&&&&&&&&&&&& type: &POST&,
&&&&&&&&&&&&&&&&&&& url: &../Home/ChangeLanguage&,
&&&&&&&&&&&&&&&&&&& data: { LanguageType: $('input[name=LanguageType]:checked').val()},
&&&&&&&&&&&&&&&&&&& dataType: &json&,
&&&&&&&&&&&&&&&&&&& success: function (data) {&&
&&&&&&&&&&&&&&&&&&&&&&& window.location.href=window.location.
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& });
&&&&&&&&&&&&&&& }
&&&&&&&&&&& })
&&& &/script&
页面中的radio描述如下:
&input type=&radio& name=&LanguageType& value=&1& checked=&checked& style=&width:10& /&@Html.Lang(&english&)
&input type=&radio& name=&LanguageType& value=&2&
style=&width:10& /&@Html.Lang(&chinese&)
HomeController的ChangeLanguage()定义如下:
&&&&&&& public static List&int&
ajaxSuccessFlag = new List&int&();
&&&&&&& public JsonResult ChangeLanguage(int LanguageType)
&&&&&&&&&&& if (LanguageType == 2)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& Session[&Lang&] = ;
&&&&&&&&&&&&&&& languageType = 2;
&&&&&&&&&&& }
&&&&&&&&&&& else
&&&&&&&&&&& {
&&&&&&&&&&&&&&& Session[&Lang&] = LangType.
&&&&&&&&&&&&&&& languageType = 1;
&&&&&&&&&&& }
&&&&&&&&&&& ajaxSuccessFlag.Clear();
&&&&&&&&&&& ajaxSuccessFlag.Add(1);
&&&&&&&&&&& return Json(ajaxSuccessFlag, JsonRequestBehavior.AllowGet);
其中ajaxSuccessFlag这样写是为了给个返回值,告诉ajax调用后台函数成功。如果调用成功后要进行别的处理,就要有返回值;如果只是纯粹的调用后台,别的不做,可以是public&void ChangeLanguage(int
LanguageType)
最后就是控制器管理页面的方法了,要给页面标示值:
public ActionResult XXXX()
&&&&&&&&&&& isHomePage = 0;
&&&&&&&&&&& if (Session[&Lang&] == null)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& Session[&Lang&] = LangType.
&&&&&&&&&&&&&&& languageType = 1;
&&&&&&&&&&& }
&&&&&&&&&&& ViewBag.radioNo = languageT
&&&&&&&&&&& ViewBag.IsHomePage = isHomeP
&&&&&&&&&&& 。。。

本文已收录于以下专栏:
相关文章推荐
本文实例讲述了ThinkPHP控制器间实现相互调用的方法。分享给大家供大家参考。具体实现方法如下:
ThinkPHP同一个项目里,两个控制器的方法如何相互调用呢?ThinkPHP提供了一个A(),通...
数据存储模型Model:
public class CalendarEvent
public string id { }
上一篇文章讲解了后台控制器如何向前台页面传递数据,今天就接着为大家讲解前台View页面向后台Controller控制器传递数据的几种方式。在此声明,这几种方式是我在实际使用过程中遇到并总结的,如果那个...
数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递
前台接收显示数据视图View:
div style=&height:300 wid...
数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递
前台接收显示数据视图View:
Visual Stuido (1): 跨项目调用 同一个solution下面不同project之间的方法调用:
AnotherProject的配置Configuration Type是Dynamic ...
在日常生活中,我们根据客户的需求不得不改相应的代码,但是为了不改太多,采取简单,快捷的办法是我们程序员的重点。废话不多说,直接进入正题。
在jsp中,为了满足需求,我写了一个方法,调用两次。
一、使用场景开发了一款App,包括iOS及Android版,到了推广阶段,准备生成二维码让用户扫码下载,那这个二维码该怎么生成?iOS及Andorid各自生成一个二维码让用户区分下载?当然这种方式是可...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
ThinkPHP 中有跨模块调用的 A() 和 R() 方法。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
A('Weixin')-&method();
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:Codeigniter中如何从一个controller中访问另一个controller中的函数?
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
这样肯定是不行的!可以有两种解决方式1.把那个需要调用的方法写在common里,这样控制器都可以调用了
2.采用继承,如果这两个控制器继承同一父类,父类里有这个公共的方法,就可以调用了
CI 不支持控制器之间互相调用的,所以如果你个controller中要调用另外一个controller中的action无法实现,但是为了代码复用,如果一个控制器中的action需要其他控制器调用,你可以把它放在一个公用的模型中,亦或者把它分离到全局公用代码文件中!其实mvc设计中,像你要实现的功能,最好作为一个准则,把它独立于公用模型,而对于独立的controller核心处理该模型下的业务逻辑!
写成lib把,要不然会很乱的
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (14653) 次}

我要回帖

更多关于 js调用另外一个js 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信