MVC页面不同控制器下的方法调用同一个后台函数

来源:互联网 发布:国产保温杯 知乎 编辑:程序博客网 时间:2024/06/16 18:57

尤其是在多语言开发当中,切换语言的时候很有用。关键点就是要找到路径。

比如,我有个_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.href; //这句是调用完后自动刷新页面
    
                }
                });
            }
            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.href;
                       
}
                    });
                }
            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.href;
                   
}
                });
                }
            })
    })
    </script>


页面中的radio描述如下:

<input type="radio" name="LanguageType" value="1" checked="checked" style="width:10px;" />@Html.Lang("english")

<input type="radio" name="LanguageType" value="2"style="width:10px;" />@Html.Lang("chinese")


HomeController的ChangeLanguage()定义如下:

        public static List<int> ajaxSuccessFlag = new List<int>();
        public JsonResult ChangeLanguage(int LanguageType)
        {
            if (LanguageType == 2)
            {
                Session["Lang"] = LangType.cn;
                languageType = 2;
            }
            else
            {
                Session["Lang"] = LangType.en;
                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.en;
                languageType = 1;
            }
            ViewBag.radioNo = languageType;
            ViewBag.IsHomePage = isHomePage;

            。。。

       }


       


1 0
原创粉丝点击