2014-02-25 40 views
0

我必須調用此javascript函數從一個視圖內:從ActionLink的傳遞的值,以Javascript函數與MVC3

$("#addCompositionItem").click(function (carrier) { 
     $.mobile.loading('show'); 
     $.ajax({ 
      url: this.href, 
      cache: false, 
      success: function (html) { 
       $("#Compositions"+carrier).append(html); 
       $("#newServicePageContent").trigger("create"); 
       $.mobile.loading('hide'); 
      } 
     }); 

     return false; 
    }); 

正如你可以看到,載體是用於加載在不同的容器的HTML部分的參數。我如何從動作鏈接傳遞這個值? 我與努力:

@Html.ActionLink("Text", "ActionName", "ControllerName", new { id = "addCompositionItem", carrier="XYZ",type = "submit" }) 

,但沒有成功

回答

0

的方式我明白髮生了什麼事是你正在使用的HTML輔助生成一個錨標記,然後通過JavaScript連接到處理click事件。在您的處理程序中,您希望能夠從原始鏈接獲取一段數據。

我的建議是使用HTML數據註釋來保存數據。就像你現在所做的那樣,你的參數只是通過路由參數被編碼到href屬性中。如果改爲將其移動到HTML屬性和使用data_carrier框架將生成您的錨標記類似如下(沒有下劃線至連字符自動轉換):

@Html.ActionLink("Text", "ActionName", "ControllerName", new { /*route params*/}, new { data_carrier="..." }) 

應該導致類似:

<a href='...' data-carrier='...'>...</a> 

然後在JavaScript中,不要試圖將值作爲參數,只需使用jQuery data()方法或任何您喜歡的原始JavaScript訪問該屬性即可。

var carrier = $(this).data('carrier'); 

我認爲這將涵蓋您的使用案例。

0

下面的代碼片段由EndangeredMassa在this SO question.給出它應該可以解決你的問題。

<html> 
<head> 
<script type="text/javascript"> 

    // Wait for the page to load first 
    window.onload = function() { 

     //Get a reference to the link on the page 
     // with an id of "mylink" 
     var a = document.getElementById("mylink"); 

     //Set code to run when the link is clicked 
     // by assigning a function to "onclick" 
     a.onclick = function() { 

     // Your code here... 

     //If you don't want the link to actually 
     // redirect the browser to another page, 
     // "google.com" in our example here, then 
     // return false at the end of this block. 
     // Note that this also prevents event bubbling, 
     // which is probably what we want here, but won't 
     // always be the case. 
     return false; 
     } 
    } 
</script> 
</head> 
<body> 
    <a id="mylink" href="http://www.google.com">linky</a>   
</body> 
</html>