序列化SelectListItem和绑定

时间:2012-03-21 08:59:24

标签: asp.net-mvc-3

我有模特

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 个答案:

答案 0 :(得分:1)

您的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)
}

您的问题是您将元素列表和结果绑定到同一属性