2010-01-12 69 views
1

我試圖通過窗體中的下拉列表更改來改變我的視圖中的PartialView中的數據。現在,如果我點擊提交按鈕,我的表單沒有問題,表單收集可用,但是當我嘗試通過jQuery提交更改事件時,表單提交沒問題,但沒有表單收集JQuery Form Post不發送FormCollection到MVC控制器

任何想法?

這是提交代碼

$(function() { 
      $('#ddlSelection').change(function() { 
       var form = $("#myForm"); 
       var action = form.attr("action"); 
       var serializedForm = form.serialize(); 
       $.post(action, serializedForm, function() { alert("Finished!") }); 
      }); 
     }); 

形式是這樣的

<% using (Ajax.BeginForm("myForm", new AjaxOptions 
      { 
       UpdateTargetId = "divItemsList", 
       OnComplete = "ClearForm" 
      })) 
     {%> 


     <%=Html.Label("ddlFilter", "Parent Filter")%> 
     <%=Html.DropDownList("ddlFilter", "Please Select ...")%><br /> 



     <fieldset> 
      <legend>Filter Option Details</legend> 
      <p> 
       <label for="Value">Value:</label> 
       <%= Html.TextBox("Value") %> 
       <%= Html.ValidationMessage("Value", "*") %> 
      </p> 
     </fieldset> 
<%}%> 

SOLUTION 好吧,本來應該付出更多的關注,Ajax.Beginform標籤不給形式的ID或名稱,我認爲他們認爲這是不必要的,所以解決方案是手動添加htmlattributes。爲使..

<% using (Ajax.BeginForm("TheAction", null, new AjaxOptions 
      { 
       UpdateTargetId = "divFilterItemsList", 
       OnComplete = "ClearForm" 
      }, new { ID = "myForm", Name = "myForm" })) 
     {%> 

回答

1

我見過form.serialize如果你有東西像嵌套窗體(應該避免)的事情。您可以隨時嘗試:

var serializedForm = $("#myForm input, #myForm select, #myForm textarea").serialize(); 

要查看它是表單序列化是問題還是實際發佈。

而當你看到HTML源代碼時,你的表單有一個「myForm」的ID,而不僅僅是該名稱的權利? ASP代碼之後

編輯被張貼:爲什麼不改變你的JS到:

$(function() { 
    $('#ddlSelection').change(function() { 
     $("#myForm").submit(); 
    }); 
}); 

我不知道你已經使用從.net Ajax的形式。應該能夠觸發表單的正常提交併使其正常工作。

+0

我會試試看,歡呼鸚鵡 – Israfel 2010-01-12 17:51:30

+0

再次歡呼,我的問題是一個ajax表單doent有一個名字或id,我曾假設它把行動作爲名字/編號,我的不好,解決辦法在上面,謝謝你的幫助 – Israfel 2010-01-12 18:05:37

3

jQuery documentation

爲了正常工作,序列化要求表單字段有一個名稱屬性。只有一個ID不會工作

我會檢查,以確保您的所有表單元素都有一個名稱屬性。

+0

謝謝Kyle,是的,他們有名字值,他們是用Html助手創建的 – Israfel 2010-01-12 17:49:54