2014-01-27 74 views
1

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

<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); 
       } 
      }); 
     }); 

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

错误 error screenshot

+0

有没有什么可以张贴Ajax请求的捕获什么办法? – Martin

+0

当然,一秒钟。 – Mike

回答

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 
} 
+0

在我删除了@ Html.LabelFor()并放入一个静态标签字段之后,它就起作用了。谢谢您的帮助。 – Mike