ASP.NET MVC显示来自jQuery DataTables中的Enum列的文本?

异教徒

我应该如何显示枚举列中的文本而不是jQuery DataTable中的值,而又不会丢失其值,因为稍后我将其用于编辑目的?

给定一个班级

 public class Person
    {
        [Key]
        public int PersonUID { get; set; }

        public string FirstName { get; set; }
        public EstadoPersona Status { get; set; }
}

还有一个枚举

 public enum EstadoPersona
    {
        Active, Inactive
    }

我正在使用Controller中的以下操作填充jQuery DataTable

  public ActionResult List()
        {
            var data = db.People.Select(
               a => new
               {
                   a.FirstName,
                   a.Status,
                   a.PersonUID
               }).OrderByDescending(a => a.PersonUID).ToList();

            return Json(data, JsonRequestBehavior.AllowGet);
        }

这是我的DataTable设置:

$("#tblPersons").DataTable({
                processing: true,
                dom: 'Brtip',
                ajax: {
                    type: "POST",
                    url: "/People/List",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    data: function (data) {
                        return data = JSON.stringify(data);
                    },
                    dataSrc: "",
                    error: function (jqXHR, textStatus, errorThrown) {
                        debugger; alert("ajax error: " + textStatus);
                    }
                },
                columns: [
                   {data: "FirstName" },
                   { data: "Status"},
                   { data: "PersonUID" }
                ],
                rowId: 'PersonUID',
                },
                order: [],
            });
克里斯·H

注意:我写了整个答案,说您无法使用JSON.NET扩展名找到我所链接的问题,以表明您做不到(d'oh)。如果您愿意使用该扩展名,请查看“编辑”(非常好)。

原始答案

请参阅此堆栈溢出问题(在下面引用了重要的答案)

JavaScriptSerializer[将数据转换为JSON时使用的内容]会序列化enums为其数值,而不是其string表示形式。您将需要使用自定义序列化来将枚举序列化为其名称而不是数字值。

不幸的是,当您将转换enum为JSON时,它已转换为,int并且enum状态已丢失。

这意味着您不能简单地发送字符串(无论如何,这对您来说是不够的,因为您希望同时拥有字符串值和数字值)。

我建议做的是将发送到DataTables的对象更改为KeyValuePair<string,int>现在,这是不是一个完美的解决方案,因为你必须从转换enumKeyValuePair您发送之前和收到数据后,但它可能保持字符串名称和连接到相互数值的最简单方法在JavaScript中使用它们时。

基本上,您必须修改对发送到DataTables的a.status对象的创建,以便创建键-值对,而不是仅添加即可在该对象创建中创建。

尽管这并不是您真正想要的,但不幸的事实是您无法将序列enum化为JSON并仅保留名称,仅保留值。您必须在序列化过程中将in转换enum为可以容纳两个值(KeyValuePair,数组,aDictionary等等)的另一种类型,或者仅停止使用枚举。

编辑:在进一步研究链接的问题时,如果您使用JSON.NET扩展,则看起来实际上可以序列化枚举。如果您愿意使用该扩展名,那可能是解决您的问题的一个很好的解决方案。我以前使用过它,它非常有用,并且不难使用。

[JsonConverter(typeof(StringEnumConverter))]

是使用JSON.NET时要使用的语法。您可以在我链接的问题的第二个答案中获得更多详细信息。

编辑2:看到Vijai的回答(你如何将实际添加上述属性,一个很好的例子显示了在你的类),看来这将只发送的字符串名称enum,而不是两个名称和值。enum如果要同时使用string和int值,则可能仍然需要发送除之外的其他对象,如我的原始答案一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JQuery DataTables 未在 ASP.NET MVC 中显示数据

来自分类Dev

在Razor / MVC5(Asp.net)中显示来自db的图像

来自分类Dev

ASP.NET MVC HTML列显示

来自分类Dev

显示来自 JSON (ASP.NET MVC) 的所有视频

来自分类Dev

jQuery DataTables不使用ASP.NET MVC 4 Razor显示数据

来自分类Dev

隐藏来自ASP.NET MVC中的操作的路由值?

来自分类Dev

显示来自ASP.Net GridView中的链接的图像

来自分类Dev

显示来自ASP.Net GridView中的链接的图像

来自分类Dev

调用jQuery以显示ASP.NET MVC5中的div

来自分类Dev

调用jQuery以显示ASP.NET MVC5中的div

来自分类Dev

jQuery调用ASP.NET MVC中的Controller时显示加载微调框

来自分类Dev

无法在 DataTables 网格中包装 ASP.NET MVC 表

来自分类Dev

具有查询源的ASP.NET MVC中的JQuery DataTables

来自分类Dev

DataTables Asp.Net MVC 4流程

来自分类Dev

ASP.NET MVC:使用jQuery更改输入文本值

来自分类Dev

asp.net mvc viewdata在视图页面中显示

来自分类Dev

无法在ASP.NET MVC部分中显示JSON值

来自分类Dev

在ASP.Net MVC中显示成功保存数据的消息

来自分类Dev

ASP.NET MVC:显示模型中的多个图表

来自分类Dev

ASP.NET MVC在LabelFor中显示int编号

来自分类Dev

Favicon仅显示在ASP.NET MVC主页中

来自分类Dev

在ASP.NET MVC中显示存储过程选择结果

来自分类Dev

在ASP.NET MVC5中显示PageList

来自分类Dev

Asp.net MVC RedirectToAction在URL中显示参数

来自分类Dev

asp.net mvc viewdata在视图页面中显示

来自分类Dev

如何使用ASP.NET MVC在iframe中显示文档?

来自分类Dev

使用ASP.Net MVC中的FileStreamResult显示图像

来自分类Dev

asp.net MVC如何在集合中显示值

来自分类Dev

Iframe 未在 Asp .Net MVC5 中显示网站

Related 相关文章

热门标签

归档