2011-05-24 58 views
0

我繼承了MVC應用程序,並且是來自ASP.NET環境的真正新手。我的問題是我無法在部分視圖和控制器之間移動可變數據。在ASP.NET中,這非常簡單,而不是MVC中的情況。所以當從客戶端選擇一個Tab時觸發下面的代碼,但我需要從客戶端捕獲selectedTabIndex值並將其傳遞給控制器​​。使用MVC爲客戶端的ViewData分配值

function onTabSelect(e) { 
    var selectedTabIndex = 0; 
    selectedTabIndex = $(e.item).index(); 
    alert(selectedTabIndex); 
    } 

我考慮過使用的ViewData對象,但似乎沒有成爲一個方式,利用函數中執行任務的這個任務。所以下面的代碼似乎是一個荒謬的任務,反正它失敗了。 (請記住,我是一個極端的新手在此)

function onTabSelect(e) { 
    var selectedTabIndex = 0; 
    <% =ViewData["selectedTabIndex"]%> = selectedTabIndex;  
    } 

我還使用cookie考慮,但似乎並不成爲一個實用的方法,無論是。在ASP.NET中,我可以使用.find方法訪問客戶端控件,但這對我來說是一個陡峭的學習曲線。

我的替代品是什麼?

+0

@Mark:基本功能目標是從服務器生成data/html/json/something *以在點擊時顯示在選項卡中? – 2011-05-24 14:03:43

+0

沒有David,基本功能是通過單擊提交按鈕進行保存操作後,保留SelectedTabIndex的部分視圖。問題是在控制器中未檢測到SelectedTabIndex值來保留該值。我認爲會起作用的是使用已確認在隨後每次選擇不同選項卡時更改的值,以在控制器內捕獲和分配。這對你有意義嗎? – Mark 2011-05-24 14:19:14

回答

3

如果用戶在保存操作之間可以選擇不同的選項卡,則可能需要考慮綁定某種點擊功能(使用jQuery)來設置selectedTabIndex javascript變量。或者,您可以將隱藏的輸入值設置爲選定的選項卡索引。

在這兩種情況下,如果您需要控制器中的值(設置ViewData,ViewBag,某些模型數據等),則可以通過$.ajax提交數據並從控制器返回一些JSON

$('#SaveButton').click(function() { 
    $.ajax({ 
    url: '/Controller/Save', 
    type: 'POST', 
    // you might need to serialize additional data you want to save here 
    // but you could create any JSON object before calling $.ajax 
    data: {"selectedTabIndex": selectedTabIndex}, // data to POST 
    dataType: 'json', // this indicates the type of data returned from controller 
    success: function(data) { 
     // you didn't really describe how to programatically set a tab, 
     // so "setToTab" is a guess 
     $('#tabID').setToTab(data.selectedTabIndex); 
    } 
    }); 
} 

而且您的控制器可能看起來像

public ActionResult Save(int selectedTabIndex) 
{ 
    // again, you might need different parameters to complete your Save 
    return JsonResult(new { selectedTabIndex: selectedTabIndex }); 
} 
0

數據通過一個HTTP POST發送到控制器。創建一個隱藏輸入<input type="hidden" name="selectedTabIndex"/>並在POST之前用javascript設置值。控制器可以從Form參數中提取此值,或者如果方法包含與輸入名稱匹配的參數,則可以在Action方法中自動填充此值。

這是一個非ajax替代answer provided by David