標籤:傳值
從做了考試以來,和別人也進行了交流,發現系統內部的傳值算是一個比較費勁的問題。這篇部落格講解兩種傳值的情況——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/[email protected]["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,從頁面的隱藏欄位獲得
總結:這裡的傳值總的來說是比較麻煩的,目前還沒找到更好的方法,大家如果有好的建議歡迎留言~~這些方法都是需要大量尋找和總結的,再加上平時的多交流和積累。
傳值本身其實並不難,比較困難的是傳值的技巧性和創新性,在哪傳,用什麼方式是一個很考驗程式員思考靈活性的問題。
MVC中Controller間的傳值、Controller到View的傳值方法