MVC中Controller间的传值、Controller到View的传值方法

              从做了考试以来,和别人也进行了交流,发现系统内部的传值算是一个比较费劲的问题。这篇博客讲解两种传值的情况——MVC中Controller间的传值,这里包括了第二种Controller到View的传值。

     示例:我有两个Controller:C1和C2,我想把C1中的课程实体的课程ID传到C2中。方案是先把C1中的课程ID传到C2对应的View页面的地址栏中,然后C2从自己的View页面中获取。

      来看代码:

      

//下面是一个easyUI的表格,执行ScoringManagementCotroller下的QueryAllExamInfo方法
<table id="dg1" class="easyui-datagrid" style="width: auto; height: auto; url="/ScoringManagement/QueryAllExamInfo" title="查询结果" data-options="fitColumns:true,singleSelect:true" sortname="courseId" sortorder="asc" rownumbers="true" pagination="true">
                <thead style="width: 420px; height: auto;">
                    <tr>
                        //下面是一个表格单元的列,点击此列下的内容,执行test1函数
                        <th data-options="field:'Operation',width:80,align:'center',formatter:test1">开始判分</th>
                    </tr>
                    <script type="text/ecmascript">
                        function test1(value, row) {
                            //转到下一页的链接地址,其中包含选中的考试科目的ID
                            return '<a href="../QuestionSelection/Index?CourseId=' + row.CourseId + '">开始判分</a>'
                            $('#dg1').datagrid('reload');
                            $('#dg1').datagrid('clear');//清除表格痕迹
                        }
                    </script>
                </thead>
            </table>
       这段代码展示了怎么把C1中的字段值CourseID 传到C2的View视图 在浏览器的地址栏中。

       下面看看C2怎么获取自己View页面地址栏的CourseId,这里可谓是一波三折了。

       1、首先在C2默认Action中获取它的值:      

        public ActionResult Index()
        {
            ViewData["Id"] = Request.QueryString["CourseId"];  //课程ID,从本页面的链接地址获得            
            return View();
        }
       2、把获取的值传到View视图中一个隐藏文本框中       

        <input id="a" type ="text" hidden="hidden" value="@ViewData["Id"]" />
       3、C2中的其他Action获取此值     

                      $('#cboQuestionType').combobox({
                            onClick: $(function (cbox) {
                                var CourseID = "@ViewData["Id"].ToString()";
                            $.ajax({
                                type: "POST",
                                async: false,
                                url: '../QuestionSelection/QueryQuestionTypeByCourse?Id=@ViewData["Id"]',
                                data: { "CourseId": CourseID },
                                datatype: JSON,
                                success: function (data) {
                                    $('#cboQuestionType').combobox('clear').combobox('loadData', data);
                                    $('#cboQuestionType').combobox('setValue', '请选择题型')
                                }
                            })
                        })
        这是一段Javascript代码,通过单击下拉框执行QueryQuestionTypeByCourse方法,这个方法是在QuestionSelection这个Controller中的。

        先获取CourseID的值,然后通过data发送到后台Controller中。

        4、最后C2获取CourseID       

         //把前台传送回来的课程ID  存放到 课程题型 实体中
         ExamCourseQuestionTypeEntity enCourseQuestionType = new ExamCourseQuestionTypeEntity();
         enCourseQuestionType.CourseId = Request["Id"].ToString();//课程ID,从页面的隐藏字段获得
        

        总结:这里的传值总的来说是比较麻烦的,目前还没找到更好的方法,大家如果有好的建议欢迎留言~~这些方法都是需要大量查找和总结的,再加上平时的多交流和积累。

        传值本身其实并不难,比较困难的是传值的技巧性和创新性,在哪传,用什么方式是一个很考验程序员思考灵活性的问题。

        

       

      

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。