MVC中Controller间的传值、Controller到View的传值方法
时间:2015-01-30 22:44:12
收藏:0
阅读:5855
从做了考试以来,和别人也进行了交流,发现系统内部的传值算是一个比较费劲的问题。这篇博客讲解两种传值的情况——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,从页面的隐藏字段获得
总结:这里的传值总的来说是比较麻烦的,目前还没找到更好的方法,大家如果有好的建议欢迎留言~~这些方法都是需要大量查找和总结的,再加上平时的多交流和积累。
传值本身其实并不难,比较困难的是传值的技巧性和创新性,在哪传,用什么方式是一个很考验程序员思考灵活性的问题。
评论(0)