Сериализация SelectListItem и связывание - PullRequest
0 голосов
/ 21 марта 2012

У меня есть модель

public class UploadOptionModel
{
    public UploadOptionModel()
    {

        OutputFormat = outputFormatList.Select(i => new SelectListItem
                 {
                     Text = i,
                     Value = i
                 });
    }

    public string Email { get; set; }        
    public IEnumerable<SelectListItem> OutputFormat { get; set; }
}

и вид

@model PC.Models.UploadOptionModel
@using (Html.BeginForm())
{
    @Html.TextBoxFor(p => p.Email)
    @Html.DropDownList("OutputFormat", Model.OutputFormat)
}

Я пытаюсь отправить форму выше с помощью вызова Ajax и привязать ее к модели

//Calling ValidateFile Action controller
 $.ajax({
                    url: '@Url.Action("ValidateFile", "Converter")',
                    data: JSON.stringify({ file: fileName, formData: serializedForm }),
                    contentType: 'application/json',
                    type: 'POST',
                    success: function (response) {
                        if (response.result) {
                        } else {
                            RemoveFile(fileName);
                        }
                    }
                });

    function serializeForm() {        
        var data = $("form").serializeArray();
        var formData = {};
        for (var i = 0; i < data.length; i++) {
            formData[data[i].name] = data[i].value;
        }

        return formData;
    }

Действие ValidateFile

[HttpPost]
public JsonResult ValidateFile(string file, UploadOptionModel formData)
{
}

Проблема в том, что UploadOptionModel.OutputFormat не является обязательным.Я не могу прочитать выбранное значение раскрывающегося списка.Поле UploadOptionModel.Email успешно привязано.

1 Ответ

1 голос
/ 21 марта 2012

В вашем классе Model должно быть другое свойство, в котором вы привязываете выбранное значение из выпадающего списка.Итак, в вашей модели добавьте что-то вроде

public string OutputFormatSelected { get; set; }

, а затем используйте это в своем представлении, следующим образом:

@model PC.Models.UploadOptionModel
@using (Html.BeginForm())
{
    @Html.TextBoxFor(p => p.Email)
    @Html.DropDownListFor( m => m.OutputFormatSelected, m.OutputFormat)
}

Ваша проблема заключалась в том, что вы связали список элементов ирезультат к тому же свойству

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...