Выбранное значение из выпадающего списка не публикуется в диалоге jquery - PullRequest
2 голосов
/ 19 апреля 2010

У меня есть диалог 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');
        });

Определения My 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");
    }
}

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Ваша проблема в этой строке:

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

Вы только сериализуете <input> элементы, а не другие элементы формы.

Вы можете добавить выбранные элементы, изменив это значение на

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

или

var form = dialog.find('input:text').add('select');
0 голосов
/ 19 апреля 2010

Необходимо убедиться, что диалоговое окно по-прежнему находится в форме для значений для публикации, по умолчанию это не так, как это:

$('#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 (и некоторые другие модалы тоже) добавить к созданному модальному концу конец <body>, чтобы фактический элемент <select> находился за пределами вашей формы, то есть он не включен в значения POST.Если вы сделаете .parent().appendTo(), как указано выше, диалоговое окно будет перенесено обратно в форму, и оно должно быть опубликовано правильно.

...