将Enum发布到MVC4控制器

时间:2014-01-27 19:29:00

标签: asp.net-mvc-4 serialization enums

我有一个复杂的对象,我已经创建了一个ViewModel,一个View和一些自定义HTML助手。我的复杂对象中的一个对象是“Sender”对象。该对象需要ID和SenderType枚举是唯一的。我创建了一个自定义的Html Dropdown助手,它为每个选项添加了一个数据属性。

<select id="Sender">
     <optgroup label="Dynamic">
          <option selected="selected" value="1" data-sendertype="Dynamic">Academic Advisor</option>
     </optgroup>
     <optgroup label="Generic">
          <option value="1" data-sendertype="Generic">Test Account</option>
     </optgroup>
</select>

我应该反序列化的对象是(只填充了ID和SenderType字段):

public class Sender
{
    public int SenderID { get; set; }

    public string EmailAddress { get; set; }

    public SenderType Type { get; set; }

    public string DisplayName { get; set; }
}

public enum SenderType{

    Generic = 1,
    Dynamic = 2
}

并且表单由以下jQuery发布:

$(".controlButtons button[name='Save']").click(function(event) {
            tinyMCE.triggerSave(true, true);
            var data = $("#editTemplateForm").serializeArray();
            data.push(
                {
                    name: "Template.Sender.SenderID",
                    value: $("#Sender").val()
                },
                {
                    name: "Template.Sender.SenderType",
                    value: $("#Sender option:selected").attr("data-senderType") == "Dynamic" ? 2 :1
                },
                {
                    name: "Template.DefaultSender.SenderID",
                    value: $("#Sender").val()
                },
                {
                    name: "Template.DefaultSender.SenderType",
                    value: $("#DefaultSender option:selected").attr("data-senderType") == "Dynamic" ? 2 :1
                }
            );
            console.log(data);
            $.ajax({
                type: "POST",
                url: "@Url.Action("EditTemplateTab", new {id = Model.Template.TemplateID})",
                data: data,
                success: function(data) {
                    $("#ui-tabs-1").html(data);
                },
                error: function(data) {
                    alert(data);
                }
            });
        });

我遇到的问题是它没有反序列化我正在正确添加到serializedArray中的SenderType,并且说SenderType 0无效(这是真的)。

错误的屏幕截图 error screenshot

1 个答案:

答案 0 :(得分:2)

JSON序列化程序无法很好地转换.NET枚举。看到这篇文章:

http://msdn.microsoft.com/en-us/library/bb412170.aspx

尝试这种解决方法:

public class Sender
{
    public int SenderID { get; set; }

    public string EmailAddress { get; set; }

    public SenderType Type { get; set; }

    public int SenderTypeValue
    {
        get { return (int) this.Type; }
        set { this.Type = (SenderType) value; }
    }

    public string DisplayName { get; set; }
}

public enum SenderType
{

    Generic = 1,
    Dynamic = 2
}