2015-08-19 81 views
1

我使用VB.Net和MVC 5.服務器我有一個對象,我用JavaScript創建這樣的:如何將JSON字符串化的JavaScript對象發送到

 var myEdits = { 
      listOfIDs: [], 
      listOfValues : [] 
     }; 

我需要發送這對象到我的控制器,並轉到下一個視圖及其包含的信息。

我可以成功地對對象進行字符串化並通過ajax將其傳遞給控制器​​,並對數據進行操作,但這不允許我在成功時呈現新視圖。

我試圖用window.locationendodeURIComponent這樣的:

  myEdits = encodeURIComponent(JSON.stringify(myEdits)); 

      var postString = ("/ViewDetails/EditConfirmation/" + myEdits); 

      window.location = postString; 

但我收到此錯誤依然:從客戶端(:)中檢測

有潛在危險的Request的值。

其中我發現奇怪,因爲我看不到任何:的在請求:

EditConfirmation /%7B 「listOfIDs」 %3A%5B 「22」 %2C 「23」 %2C 「24」 %2C 「25」 %2C 「26」 %2C 「27」 %2C 「28」 %2C 「29」 %2C 「30」 %2C 「31」 %2C 「32」 %2C 「33」 %2C 「34」 %2C 「35」 %2C 「36」 %5D%2C 「listOfValues」 %3A%5B 「」 %2C 「」 %2C 「」 %2C 「」 %2C 「」 %2C 「」 %2C 「」 %2C 「」 %2C 「」 %2C 「」 %2C 「是」 %2C 「是」 %2C 「是」 %2C 「是」 %2C 「否」 %5D%7D

什麼通過javaScript或jQuery將此對象傳遞給控制器​​的正確方法,並讓服務器呈現新視圖?

回答

0

我解決了這個問題,把我的JSON字符串放入帶有AJAX調用的會話變量中,然後使用window.locationsuccess上調用適當視圖的操作。然後,當調用'success'操作來爲視圖設置我的模型時,我會從會話中檢索字符串。

+0

我很好奇是否還有更好的方法來處理這種情況,或者由於某種原因,這種方法本身具有風險。 – rogerdeuce

+0

檢查我的答案是否有幫助 – vinayan

1

它正在獲取URL編碼,因爲您使用的是HTTP GET。如果您發送的信息很多,可能需要使用HTTP POST。請參閱jQuery的$ .ajax方法。

如果您確實想繼續使用GET,請放心,如果您的操作採用了字符串參數,則會按照預期的方式通過冒號實現。 :編碼爲%3A(請參閱:http://www.w3schools.com/tags/ref_urlencode.asp)。

+0

我想我不太清楚你的意思。我嘗試用''裝飾我的控制器動作,但是我想出了同樣的錯誤。 – rogerdeuce

+0

@rogerdeuce,因爲您將「myEdits」作爲字符串放入URL中,因此它是GET。一篇文章需要javascript或html表單。可能值得關於get和post之間以及每次使用的區別。 http://stackoverflow.com/questions/19413166/mvc-get-vs-post – viggity

+0

但後來又回到了,我可以通過ajax成功發送它,但我無法以這種方式呈現新視圖。也許我說我的問題很差 – rogerdeuce

0

可能是危險的請求問題,因爲試圖將URL路徑'/ViewDetails/EditConfirmation/' + myEdits注入到瀏覽器中。

模型類

public class myEdits 
{ 
    public List<int> listOfIds {get;set;} 
    public List<string> listOfValues {get;set;} 
} 

JavaScript部分(假設的jQuery) - 發送侑myEdits對象

$.ajax({ 
    type: "POST", 
    url: 'Home/MyMethod', 
    data: myEdits, 
    success: success, 
    dataType: dataType 
}); 

的HomeController

public void MyMethod(myEdits edits) 
{ 
    return View("/ViewDetails/EditConfirmation/", edits); 
} 
+0

我檢查了這個問題,問題是'myEdits'是用javaScript創建的,需要從視圖傳遞到控制器。控制器方法則需要返回一個新的全視圖。 – rogerdeuce

+0

@rogerdeuce - 所以,我只是更新了答案,將數據表單JavaScript發送到您的視圖。由於模型是通過賦予屬性名稱與JavaScript對象相同的方式創建的,因此MVC應該能夠將其反序列化爲模型對象..謝謝 – vinayan

相關問題