2013-08-04 66 views
0

我有一個MS MVC [剃刀]項目中的視圖,我想通過JSON post操作將視圖數據提交回控制器。我環顧四周,找不到如何檢索和打包視圖數據以便提交回控制器。我假設JSON序列化操作會在調用時打包數據,但這似乎沒有發生。例如:MS MVC(剃鬚刀)訪問視圖數據serializartion

MVC視圖------------------------------

@using (Html.BeginForm()) 
    { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <center> 
     <fieldset id="UserCreateFieldset"> 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.FirstName) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.FirstName) 
       @Html.ValidationMessageFor(model => model.FirstName) 
      </div> 

      <p> 
       <input type="button" name="CreateButton" value="Create" onclick="CreateUser()" /> 
      </p>          
     </fieldset> 
    </center> 
    } 

    <script> 

    function CreateUser() 
    { 
     var infoForm = $("#UserCreateFieldset"); 
     var entries = infoForm.serializer.Serialize(Model); 

     $.ajax(
        { 
         url: '@Url.Action("CreateUser", "User")', 
         data: entries, 
         type: "POST", 
         dataType: "json", 
         success: function (data) 
         { 
          $.event.trigger({ 
           type: "CreateUserCompleted", 
           NewUserID: 1, 
          }); 
         } 
        });    
    } 
    </script> 

剛要注意;當通過帖子調用控制器時,它會收回模型 - 但它包含用於加載視圖的原始值。

彼得

回答

0

使用來自jQuery的的.serialize()方法:

function CreateUser() 
{ 
    var data = $('form').serialize(); 

    $.ajax({ 
     url: '@Url.Action("CreateUser", "User")', 
     data: data, 
     type: "POST", 
     dataType: "json", 
     success: function (data) 
     { 
      $.event.trigger({ 
       type: "CreateUserCompleted", 
       NewUserID: 1, 
      }); 
     } 
    });    
} 

您可以代替使用Html.BeginForm使用Ajax.BeginForm不惹的內部,如果你正在做同樣的事情,作爲一個在Html.BeginForm沒有任何東西特別。你可以更改您的代碼:

@using(Ajax.BeginForm("MyAction", "MyController", 
      new AjaxOptions 
      { 
       HttpMethod = "POST" 
      })) 
{ 
    // Same form 
} 

它甚至有OnSuccess方法,該方法可以在AjaxOptions聲明中使用:

@using(Ajax.BeginForm("MyAction", "MyController", 
      new AjaxOptions 
      { 
       HttpMethod = "POST", 
       OnSuccess = "TriggerEvent" 
      })) 
{ 
    // Same form 
} 

並設置在JavaScript函數即可成功叫:

function TriggerEvent() { 
    $.event.trigger({ 
     type: "CreateUserCompleted", 
     NewUserID: 1, 
    }); 
} 
+0

感謝您的意見。該建議沒有奏效。也許我應該澄清我想要做的事情。在執行提交操作(由輸入控件啓動)時,在[razor] MVC視圖的默認操作中,將使用視圖中的更新值調用控制器。 我想要做的是在JS腳本函數中執行相同的操作。我不知道當前的視圖數據是如何檢索和打包的[作爲json對象]調用控制器。我上面給出的例子是不正確的,是一個錯字。我意識到/相信使用的Model對象將與init模型相關。 – Peter

+0

是的,我以爲你想將模型傳遞給JavaScript,這是正確的方式來做到這一點。在你的實際問題上,你試圖獲得完整的表單並通過ajax發佈?然後讓我更新答案。 – sergioadh

+0

好的;使用Ajax.BeginForm確實有效。但是在控制器操作被調用後,我得到了一個奇怪的結果。我收到你想要打開或保存CreateUserXXX.json消息。我不知道爲什麼,但我從行動中返回一個結果(我將在稍後需要)。此外,成功功能沒有被調用。 – Peter