Asp.net mvc 4 将枚举后置到MVC4控制器
我有一个复杂的对象,我为它创建了一个视图模型、一个视图和一些自定义HTML帮助程序。我的复杂对象中的一个对象是“发送者”对象。该对象要求ID和SenderType枚举唯一。我已经创建了一个自定义Html下拉帮助器,它为每个选项添加了一个数据属性Asp.net mvc 4 将枚举后置到MVC4控制器,asp.net-mvc-4,serialization,enums,Asp.net Mvc 4,Serialization,Enums,我有一个复杂的对象,我为它创建了一个视图模型、一个视图和一些自定义HTML帮助程序。我的复杂对象中的一个对象是“发送者”对象。该对象要求ID和SenderType枚举唯一。我已经创建了一个自定义Html下拉帮助器,它为每个选项添加了一个数据属性 <select id="Sender"> <optgroup label="Dynamic"> <option selected="selected" value="1" data-sender
<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>
该表单由以下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无效(这是真的)
错误屏幕截图
JSON序列化程序不能很好地与.NET枚举进行转换。见本文: 尝试以下方法:
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
}
有没有什么方法可以发布ajax请求的捕获?在我删除@Html.LabelFor()并放入静态标签字段后,这种方法就奏效了。谢谢你的帮助。
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
}