2014-01-27 4 views
1

У меня есть сложный объект, для которого я создал ViewModel, View и некоторые пользовательские HTML-хеды. Одним из объектов моего сложного объекта является объект «Отправитель». Для этого объекта требуется уникальный идентификатор и перечисление SenderType. Я создал настраиваемый помощник Html Dropdown, который добавляет атрибут данных для каждой опции.Сообщение Enum to MVC4 Controller

<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