2010-04-19 55 views
2

我有一個jQuery對話框。除了下拉菜單之外,所有字段的發佈都是正確的,該值將作爲null傳遞,而不是選定的值。從下拉列表中選擇的值不會從jQuery對話框發佈

<div id="popupCreateCompany" title="Create a new company"> 
    <form> 
    <fieldset> 
    <p> 
     <label for="company_name">Company Name:</label> 
     <%= Html.TextBox("company_name") %>  
    </p> 
    <p> 
     <label for="company_desc">Company Description:</label> 
     <%= Html.TextBox("company_desc") %> 
    </p> 
    <p> 
     <label for="address">Address:</label> 
     <%= Html.TextBox("address") %> 
    </p> 
    <p> 
     <label for="city">City:</label> 
     <%= Html.TextBox("city") %> 
    </p> 
    <p> 
     <label for="state">State:</label> 
     <%= Html.TextBox("state") %> 
    </p> 
    <p> 
     <label for="zip">Zip:</label> 
     <%= Html.TextBox("zip") %> 
    </p> 
    <p> 
     <label for="website">Website:</label> 
     <%= Html.TextBox("website", "http:/") %> 
    </p> 
    <p> 
     <label for="sales_contact">Sales Contact:</label> 
     <%= Html.DropDownList("sales_contact", Model.SelectSalesContacts, "** Select Sales Contact **") %> 
    </p> 
    <p> 
     <label for="primary_company">Primary Company:</label> 
     <%= Html.DropDownList("primary_company", Model.SelectPrimaryCompanies, "** Select Primary Company **") %> 

    </p> 
    </fieldset> 
    </form> 

的jQuery:

$('#popupCreateCompany').dialog(
       { 
        autoOpen: false, 
        modal: true, 
        buttons: 
        { 
         'Add': function() { 
          var dialog = $(this); 
          var form = dialog.find('input:text'); 
          $.post('/company/create', $(form).serialize(), function() { 
           dialog.dialog('close'); 
          }) 
         }, 
         'Cancel': function() { 
          $(this).dialog('close'); 
         } 
        } 
       }); 

     $("#create-company").click(function() { 
      $('#popupCreateCompany').dialog('open'); 
     }); 

我的SelectList定義:

public class SubcontractFormViewModel 
{ 
    public subcontract Subcontract { get; private set; } 
    public SelectList SelectPrimaryCompanies { get; set; } 
    public MultiSelectList SelectService_Lines { get; private set; } 
    public SelectList SelectSalesContacts { get; private set; } 

    public SubcontractFormViewModel(subcontract subcontract) 
    { 
     SubcontractRepository subcontractRepository = new SubcontractRepository(); 

     Subcontract = subcontract; 
     SelectPrimaryCompanies = new SelectList(subcontractRepository.GetPrimaryCompanies(), "company_id", "company_name"); 
     SelectService_Lines = new MultiSelectList(subcontractRepository.GetService_Lines(), "service_line_id", "service_line_name", subcontractRepository.GetSubcontractService_Lines(Subcontract.subcontract_id)); 
     SelectSalesContacts = new SelectList(subcontractRepository.GetContacts(), "contact_id", "contact_name"); 
    } 
} 

回答

3

你的問題是這樣的一行:

var form = dialog.find('input:text'); 

你只序列化<input>元素,沒有其他形式的元素。

你可以通過改變這個添加所選元素

var form = dialog.find('input:text, select'); 

var form = dialog.find('input:text').add('select'); 
+0

謝謝。就是這樣! – RememberME 2010-04-19 15:37:55

0

您需要確保對話仍然是形式的值後內,默認情況下是不,如下所示:

$('#popupCreateCompany').dialog({ 
    autoOpen: false, 
    modal: true, 
    buttons: 
    { 
     'Add': function() { 
      var dialog = $(this); 
      var form = dialog.find('input:text'); 
      $.post('/company/create', $(form).serialize(), function() { 
       dialog.dialog('close'); 
      }) 
     }, 
     'Cancel': function() { 
      $(this).dialog('close'); 
     } 
    } 
}).parent().appendTo("#myFormID"); 

默認情況下,jQuery UI(以及其他某些模式)會附加到<body>末尾的已創建模態,因此實際的<select>元素超出了您的表單,這意味着它不包含在POST值中。如果你像上面那樣做.parent().appendTo(),它會將對話框移回到表單中,並且應該正確發佈。

相關問題