2013-04-17 40 views
13

Tôi đã viết sau jquery theo quan điểm từng phần của tôi:Cách chuyển giá trị động trong @ Url.Action?

$.ajax({ 
     type: "POST", 
     url: '@Url.Action("PostActionName", "ControllerName")', 
     data: { Id: "01" }, 
     success: function(data) 
      { 
      if (data.success="true") 
       { 
        window.location = '@Url.Action("GetActionName", "ControllerName")' 
       } 
      } 
    }); 

Tên Action và tên điều khiển không cố định, họ chắc chắn sẽ thay đổi tùy thuộc vào quan điểm trong đó xem phần này được đặt. Tôi có chức năng tìm nạp tên hành động và bộ điều khiển, nhưng không chắc chắn làm thế nào tôi có thể vượt qua chúng trong @ Url.Action.

Sau đây là các chức năng Javascript để lấy hành động và điều khiển tên:

function ControllerName() { 
      var pathComponents = window.location.pathname.split('/'); 
      var controllerName; 
      if (pathComponents.length >= 2) { 
       if (pathComponents[0] != '') { 
        controllerName = pathComponents[0]; 
       } 
       else { 
        controllerName = pathComponents[1]; 
       } 
      } 
      return controllerName; 
     } 

     function ActionName() { 
      var pathComponents = window.location.pathname.split('/'); 
      var actionName; 
      if (pathComponents.length >= 2) { 
       if (pathComponents[0] != '') { 
        actionName = pathComponents[1]; 
       } 
       else { 
        actionName = pathComponents[2]; 
       } 
      } 
      return actionName;    
     } 
+0

hiện qua hai chuỗi của bạn cho 'Url.Action'. Chúng cũng có thể là các biến. –

+0

"không cố định, chúng nhất định thay đổi" - các giá trị đến từ đâu? –

+0

Khi @ Url.Action là một trình trợ giúp MVC, việc tạo một biến sẽ không giúp tôi .. – Nirman

Trả lời

24

tôi có chức năng để lấy cách gọi tên hành động và điều khiển, nhưng không chắc chắn làm thế nào tôi có thể vượt qua họ trong @ Url.Action

Vâng, bạn có thể gọi những chức năng đó. Ví dụ, nếu họ là phương pháp khuyến nông đến lớp UrlHelper:

window.location = '@Url.Action(Url.MyFunction1(), Url.MyFunction2())' 

hoặc nếu họ có chức năng chỉ tĩnh:

window.location = '@Url.Action(SomeClass.MyFunction1(), SomeClass.MyFunction2())' 

Nếu mặt khác các giá trị mà cần phải được thông qua được biết đến chỉ trên các khách hàng mà bạn có thể làm như sau:

var param = 'some dynamic value known on the client'; 
var url = '@Url.Action("SomeAction", "SomeController", new { someParam = "__param__" })'; 
window.location.href = url.replace('__param__', encodeURIComponent(param)); 

UPDATE:

Có vẻ như bạn đang cố gắng để lấy bộ điều chỉnh dòng và hành động đó có thể đạt được như thế:

@{ 
    string currentAction = Html.ViewContext.RouteData.GetRequiredString("action"); 
    string currentController = Html.ViewContext.RouteData.GetRequiredString("controller"); 
} 

và sau đó:

window.location.href = '@Url.Action(currentAction, currentController)'; 
+0

Tôi quên đề cập đến, chúng là các hàm javascript .. xem chỉnh sửa để xem các hàm đó. – Nirman

+0

cảm ơn Darin cho câu trả lời chi tiết, tuy nhiên, tôi không chắc chắn những gì bạn có nghĩa là "SomeAction" và "SomeController". Đây có nên là tên của Hành động mục tiêu không? hay nó nên năng động? – Nirman

+1

Dường như bạn đang tìm nạp hành động và bộ điều khiển hiện tại. Xem ví dụ cập nhật của tôi và không sử dụng javascript cho điều đó. –

2

Bạn đã thử một cái gì đó như thế này? Tôi đã không thử nó bản thân mình, nhưng nó sẽ làm việc.

var dataToSend = "01"; 
var url = '/controllerName/actionName/' + dataToSend; 
var actionName = ActionName(); 
var controllerName = ControllerName(); 
url.replace("actionName",actionName); 
url.replace("controllerName",controllerName); 
window.location = url; 
0
function functionName(var1, var2) {var link = '@Url.Action("MethodName", "Controller", new { id = "-1", name = "-2" })'; 
    link = link.replace("-1", var1); 
    link = link.replace("-2", var2);} 

trước, thay thế:

html += "<a class='k-button k-button-icontext k-primary' href='" + link + "'><i class='fa fa-download'></i> Name Button</a>" 
Các vấn đề liên quan