2013-11-23 81 views
0

我有一個Javascript文件,它在我的代碼隱藏中調用方法。這似乎工作,如果我創建一個無參數的默認構造函數,示例1,但我想傳遞給保存方法我ViewModel,示例2.當我這樣做時,我得到一個500錯誤。深入挖掘後,我發現了有關該網絡錯誤的更多細節。將ViewModal從javascript文件傳遞到代碼隱藏文件

無參數默認構造函數 - 只有當其他構造函數被註釋掉時纔有效。

實施例1

[HttpPost] 
public JsonResult SaveWorkRequestDetails() 
{ 
    return Json(new {}); 
} 

如果我有這兩種代碼中的隱藏文件然後我得到這個錯誤:對控制器類型「WorkRequestController」動作「SaveWorkRequestDetails」的當前請求是下列之間曖昧操作方法: System.Web.Mvc.JsonResult SaveWorkRequestDetails()上型WorkRequest.Controllers.WorkRequestController System.Web.Mvc.JsonResult SaveWorkRequestDetails(WorkRequest.ViewModel.WorkRequestViewModel)上型WorkRequest.Controllers.WorkRequestController

示例2

[HttpPost] 
public JsonResult SaveWorkRequestDetails(WorkRequestViewModel viewModel) 
{ 
    // TODO: Save logic goes here 
    return Json(new { }); 
} 

我需要傳遞viewModel以保存用戶的選擇。我錯過了一些東西,我不確定是什麼。

RegisterUIEventHandlers: function() { 
    $('#Save').click(function (e) { 
     // Check whether the form is valid. Note: Remove this check, if you are not using HTML5 
     if (document.forms[0].checkValidity()) { 
      e.preventDefault(); 
      $.ajax({ 
       type: "POST", 
       url: WorkRequest.SaveUrl, 
       data: ko.toJSON(WorkRequest.ViewModel), 
       contentType: 'application/json', 
       async: true, 
       beforeSend: function() { 
        // Display loading image 
        alert(ko.toJSON(WorkRequest.ViewModel)); 
       }, 
       success: function (result) { 
        // Handle the response here. 
       }, 
       complete: function() { 
        // Hide loading image. 
       }, 
       error: function (jqXHR, textStatus, errorThrown) { 
        // Handle error. 
       } 
      }); 
     } 
    }); 
} 

在你beforeSend的JavaScript內看到,在AJAX POST警報上面,我看到了用戶進行選擇。一切正常,所以我只想把它傳遞給Controller的SaveWorkRequestDetails,我該怎麼做。我的理解是數據參數傳遞給url參數中指定的方法。

回答

0

錯誤消息很明顯。您有兩個具有相同名稱的操作方法。所以,致電SaveWorkRequestDetails是錯誤的,因爲錯誤表明。

你可以在C#中重載函數,但它在ASP.NET MVC框架中是不可能的。

在ASP.NET MVC的同一控制器中,不可能有兩個具有不同方法簽名的SaveWorkRequestDetails()動作。

只要刪除第一個SaveWorkRequestDetails(),你會沒事的。

+0

我添加了一個沒有任何參數的例子,因爲例子2沒有被調用。理想情況下,我只想將您看到的Save方法作爲第二個示例。 –

+0

通過從不叫,你的意思是WorkRequestViewModel爲null或者,Ajax是請求永遠不會發送? –

+0

我的意思是我在那裏放置一個斷點,它永遠不會到達。如果我只有示例2中的Save方法,則會得到不同的錯誤:爲此對象定義的無參數構造函數。 –

0

我將dataType更改爲json而不是application/json。這解決了錯誤的問題,說明沒有無參數的默認構造函數。現在正在調用SaveWorkRequestDetails。

RegisterUIEventHandlers: function() { 
    $('#Save').click(function (e) { 
     // Check whether the form is valid. Note: Remove this check, if you are not using HTML5 
     if (document.forms[0].checkValidity()) { 
      e.preventDefault(); 
      $.ajax({ 
       type: "POST", 
       url: WorkRequest.SaveUrl, 
       data: ko.toJSON(WorkRequest.ViewModel), 
       dataType: 'json', 
       async: true, 
       beforeSend: function() { 
        // Display loading image 
        alert(ko.toJSON(WorkRequest.ViewModel)); 
       }, 
       success: function (result) { 
        // Handle the response here. 
       }, 
       complete: function() { 
        // Hide loading image. 
       }, 
       error: function (jqXHR, textStatus, errorThrown) { 
        // Handle error. 
       } 
      }); 
     } 
    }); 
相關問題