2013-12-20 55 views
-2

我對我的項目中的常見視圖有一點不同的看法。它像所有其他人一樣使用Ajax.StartForm。但在這種情況下,我只想發送一個以JSON解析的JavaScript對象,而不是我表單的字段值。ASP.Net MVC Ajax表單發送JSON而不是字段值

爲了說明這一點,我想這步驟:在這種形式下,當提交按鈕被按下,默認提交事件將被攔截和JavaScript對象將被創建 - 從一些自定義部件聚集值 - 發送到行動。然後,該對象將會像data: JSON.stringify(that_object)一樣發送,就像jQuery.ajax一樣。

問題是我不想使用jQuery.ajax,我想使用MVC的Ajax.StartForm,因爲我的應用程序會自動激活一些函數和驗證。

有辦法完成那種行爲嗎?

如果這是不可能的,恐怕我將被迫將該JSON解析對象作爲字符串存儲在隱藏字段中以提交它。

UPDATE:

這是我的ViewModel:

public class ProcessWizardViewModel 
{ 
    public long ProcessId { get; set; } 
    public List<long> ProcessIds { get; set; } 
    public List<ProcessItemWizardViewModel> Items { get; set; } 

    public ProcessWizardViewModel() 
    { 
     ProcessIds = new List<long>(); 
     Items = new List<ProcessItemWizardViewModel>(); 
    } 
} 

public class ProcessItemWizardViewModel 
{ 
    public long Type { get; set; } 
    public bool Dependence { get; set; } 
    public long ProcessCultureId { get; set; } 
    public ProcessItemWizardViewModel() { } 
} 

ProcessIds來自使用複選框選擇一個網格,Items來自一個樹形視圖複選框的選擇。

回答

1

如果您正在發佈MVC ActionMethod(某種類型),那麼將它發佈爲通常情況並讓模型活頁夾處理它會更有意義。另外,據我所知,你是唯一的選擇將使用jQuery.ajax()

從問題的更新

更新如果你的控制器有有這樣的簽名行動:

[HttpPost] 
public ActionResult(ProcessWizardViewModel model) { } 

並且您的視圖有@model ProcessWizardViewModel模型聯編程序將正確處理值。

+0

是的,它會但我不能。這是一個包含兩個小部件的視圖,我必須將它們的數據合併到一個對象中,以便MVC序列化爲視圖模型。 – DontVoteMeDown

+0

你可以發佈控制器和視圖模型嗎?還有其他方法來處理它。 –

+0

剛用視圖模型更新了這個問題。我不知道控制器在這裏是否重要,這裏有一些問題。實際上它將對象作爲一個字符串接收並對其進行反序列化。 – DontVoteMeDown