2013-07-10 46 views
0

我有一個編輯頁面,當我按下按鈕,然後將名爲#main的頁面的給定部分的div更改爲另一個頁面時,我想提交一些更改到服務器,以便用新信息更新它。將修改後的模型提交回控制器

要做到這一點,我不認爲我可以使用提交按鈕(糾正我,如果我錯了?),所以我使用jquery函數來處理頁面的選定部分的點擊和更改。

當前發送到服務器的對象是空的,而不是修改的內容。

這裏是有問題的看法:

@model Project.Models.ExampleModel 

@using (Html.BeginForm()) 
{ 
    <fieldset> 
     <legend>Edit Example: @Model.name</legend> 
     <br/> 
     @Html.LabelFor(c => c.name) 
     @Html.TextBoxFor(c => c.name) 
     <br/> 
     @Html.LabelFor(c => c.dropdown) 
     @Html.DropDownListFor(c => c.dropdown, Model.dropdowns) 
     <br /> 
     <br /> 
     <input type="button" data-edit-id="@Model.id" value="Submit Changes" /> 
    </fieldset> 
} 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('input[data-edit-id]').on('click', function() { 
      var id = $(this).attr('data-edit-id'); 
      console.log(id); 
      $.post('Home/EditPage', '@Model'); 
      $("#main").load("/Home/NewDivPage?id=" + id); 
     }); 
    }); 
</script> 

任何幫助是極大的讚賞

+0

是否會被執行您正在使用jQuery處理程序** post **(這是一個ajax調用)手動執行發佈操作,您將需要讀取所有HTML輸入,創建JSON對象(或其他格式)並將其發送到服務器。您不能在該上下文中使用** @ Model **。 – gustavodidomenico

+0

我明白了,那正是我試圖避免做的事情,但我想我必須這樣做!謝謝 – user1857900

+1

看看ajax mvc helper,就像** @ Ajax.BeginForm()** ...它可以幫助你避免一些不需要的客戶端代碼。 – gustavodidomenico

回答

1

這是錯誤的

$.post('Home/EditPage', '@Model'); 

@Model在服務器端進行評估,你會得到簡單字符串在客戶端與該表達式。你應該動態序列form併發送其內容服務器

$.post('Home/EditPage', $('form').serialize()); 

而且,最後一條語句應該回調$。員額傳遞,所以經過後完成加載

$.post('Home/EditPage', $('form').serialize(), function(){ 
    $("#main").load("/Home/NewDivPage?id=" + id); 
}); 
+0

我將如何處理這個服務器端?用同樣的方式,如果模型是使用提交按鈕發回的? – user1857900

+0

當然可以。 – archil

相關問題