2011-10-20 61 views
4

我創建了一個ASP.NET MVC 2.0應用程序。ActionLink jQuery參數

我有一個包含「報告」列表的dropdownbox。在下拉列表旁邊,我有兩個ActionLink。一個說「添加新報告」,另一個說「編輯報告」。

添加新報告」鏈接,非常簡單...它在我的控制器中調用ViewResult並返回new View()。大!這工作沒問題!

編輯報告」鏈接有點棘手,因爲我希望將當前在下拉列表中選擇的項目的選定ID傳遞給ActionLink。

我發現,我展示瞭如何AJAXify我的ActionLink的,但我做錯事的文章...

這裏是ActionLink的在視圖的「編輯」鏈接:

<%=Html.ActionLink("Edit report", "EditReport", "Report", null, new { id = "edit" })%> 

這裏是jQuery的單擊事件處理「點擊」

$("#edit").click(function() { 
    $.ajax({ 
    url: '<%=Url.Action("EditReport")%>', 
    type: 'POST', 
    data: { reportId: $('select[name="ReportId"] option:selected').val() }, 
    success: function(result) { 
      //alert("succes"); 
    }, 
    error: function() { 
      alert("error"); 
    } 
    }); 
    return false; 
}); 

這裏是控制器的方法:

public ViewResult EditReport(int reportId) 
{ 
     return View("EditReport"); 
} 

當放置在控制器的方法中設置斷點,它被擊中和參數「reportId」是正確傳遞......但其餘代碼(返回查看()部分)似乎並不裏面的工作,因爲jQuery點擊事件,我有一個「返回false」。

當在click事件中刪除「返回false」時,斷點不再被命中。因此,我不能去我的「EditReport」視圖...

我在想什麼/不理解這裏?

另外...有沒有更好/更好/更清潔的方法來實現我的任務,而無需使用AJAX調用?

+0

你嘗試過在你的行動來回報JSON或字符串而不是視圖? –

+0

嗯......事情是我希望顯示一個不同的(「EditReport」)視圖,它將被強制輸入。該視圖將具有允許用戶編輯報告信息的形式。糾正我,如果我錯了,但是,返回json不會將我重定向到另一個視圖是否正確?也許我的整個方法是錯誤的。 – Vlince

+0

您不必使用ajax將用戶重定向到其他視圖,我相信ajax的目的是更新頁面內容而無需重新加載整個頁面。 –

回答

15

好了,因爲我現在可以在這裏發佈的答案是(如果有人有興趣):

首先,我需要修改ActionLink的,放在一個預定值,一旦鏈接被點擊,將被替換的參數。

<%=Html.ActionLink("Edit report", "EditReport", "Report", new { reportId="xxx"}, new { id = "edit" })%> 

二,修改jQuery的單擊事件:在控制器的方法

$("#edit").click(function() { 
    //Get the id of the selected item in dropdown 
    var id = $('select[name="ReportId"] option:selected').val(); 

    //Replace the predifined QueryString param "xxx" with the "id" 
    this.href = this.href.replace("xxx", id); 
}); 

沒有什麼改變......它保持不變:

public ViewResult EditReport(int reportId) 
     { 
      //Fix me... 
      return View("EditReport"); 
     } 
0

你可以做這樣的事情,只要你已經配置的路由路徑ControllerName/EditReports/{ReportId}

$("#edit").click(function() { 
     window.location.href = '<%=Url.Action("EditReport")%>' +'/'+ $('select[name="ReportId"] option:selected').val(); 
     return false; 
});