Asp.Net Mvc jQuery Datatable Row reOrder Drag Drop和Id问题

Posted

技术标签:

【中文标题】Asp.Net Mvc jQuery Datatable Row reOrder Drag Drop和Id问题【英文标题】:Asp.Net Mvc jQuery Datatable RowOrder Drag&Drop and Id problem 【发布时间】:2020-04-20 16:52:03 【问题描述】:

我一直在使用 Asp.Net MVC 开发一个调查应用程序。我在向调查分配问题的页面上有 2 个附属表。对我来说重要的是右边的桌子。可以从左侧的问题池中添加此表。还应该可以更改右侧表格中的行顺序。但是在这个表中,我在拖放一行时遇到了问题。我正在拖动线,但它并没有停止我将它放回原来的位置。

应该使用 rowReorder.dataSrc 属性,如this thread 中所述。但是当datasrc属性被赋予自己数据的question id时,拖拽时行会发生变化,但id部分始终保持有序。当然,当问题的行发生变化时,id 行按升序排列是很荒谬的。 'Question' 对象和数据如下。

Question.cs 对象

//------------------------------------------------------------------------------
// <auto-generated>


namespace MerinosSurvey.Models

using System;
using System.Collections.Generic;

public partial class Questions

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Questions()
    
        this.Responses = new HashSet<Responses>();
        this.Options = new HashSet<Options>();
        this.SurveyQuestions = new HashSet<SurveyQuestions>();
    

    public int QuestionId  get; set; 
    public string QuestionName  get; set;      
    public System.DateTime CreatedDate  get; set; 
    public int CreatedUserId  get; set; 
    public bool IsActive  get; set; 
    public bool Status  get; set; 
    public System.DateTime UpdatedDate  get; set; 


    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Options> Options  get; set; 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<SurveyQuestions> SurveyQuestions  get; set; 


Json 数据


"data": [

  "Responses": [

  ],
  "Options": [

  ],
  "SurveyQuestions": [

  ],
  "QuestionId": 1,
  "QuestionName": "Merinos ürünlerinden ne kadar memnunsunuz?",
  "QuestionTypeId": 1,
  "CreatedDate": "\/Date(1577048400000)\/",
  "CreatedUserId": 1,
  "IsActive": true,
  "Status": true,
  "UpdatedDate": "\/Date(1577663808297)\/"
,

  "Responses": [

  ],
  "Options": [

  ],
  "SurveyQuestions": [

  ],
  "QuestionId": 2,
  "QuestionName": "Merinosun satis magazalarindan memnun musunuz?",
  "QuestionTypeId": 1,
  "CreatedDate": "\/Date(1577048400000)\/",
  "CreatedUserId": 1,
  "IsActive": true,
  "Status": true,
  "UpdatedDate": "\/Date(1577048400000)\/"
,

  "Responses": [

  ],
  "Options": [

  ],
  "SurveyQuestions": [

  ],
  "QuestionId": 3,
  "QuestionName": "Merinosun müsteri temsilcilerinden memnun musunuz?",
  "QuestionTypeId": 1,
  "CreatedDate": "\/Date(1577048400000)\/",
  "CreatedUserId": 1,
  "IsActive": true,
  "Status": true,
  "UpdatedDate": "\/Date(1577048400000)\/"

]

Jquery Datatable ajax 调用

$("#rightTable").DataTable(
        "ajax": 
            "url": "/Survey/GetRelatedQuestions",
            "type": "POST",
            "data":  "surveyId": surveyId ,
            "datatype": "int"
        ,
        "columnDefs": [
             width: '10%', targets: 0 
        ],
        //"scrollX": true,
        //"scrollY": "auto",
        "columns": [
            "data": "QuestionId",
            "data": "QuestionName"
        ],
        //responsive: true,
        ordering: false,
        info:true,
        rowReorder: 
            dataSrc: 'QuestionId',
            selector: 'tr'
        ,
        "language": 
            "emptyTable":
                "Ankete ilişkilenmiş soru bulunamadı. "
        
    );

【问题讨论】:

【参考方案1】:

我希望这对你有用

Jquery 数据表有 rowReordering 和 createdRow 事件。就用那个

$(document).ready(function()
 var table = $('#example').DataTable(
  'ajax': 
     'url': '' 
     ,
  'createdRow': function(row, data, dataIndex)
     $(row).attr('id', 'row-' + dataIndex);
      
 );
    table.rowReordering();   
  );

【讨论】:

感谢您的回复。但我收到类似 Uncaught TypeError: rightTable.rowReordering is not a function 的错误 要使用 rowReordering(),您需要将表初始化为 $('#rightTable').dataTable(),而不是 $('#rightTable').DataTable()。 详细信息参考这个网址gyrocode.com/articles/jquery-datatables-row-reordering 我知道我已经将我的数据表初始化为; var rightTable = $("#rightTable").DataTable(. 'creatdRow':.......) 然后我添加了 rightTable.rowreordering(); 您发送的页面中有注释; '有一个用于 jQuery DataTables 的行重新排序插件,允许在表格中拖放行重新排序。遗憾的是,此插件不再适用于 DataTables 1.10 及更高版本。我的数据表版本是 1.10.20

以上是关于Asp.Net Mvc jQuery Datatable Row reOrder Drag Drop和Id问题的主要内容,如果未能解决你的问题,请参考以下文章

基于 jQuery 的专业 ASP.NET WebForms/MVC 控件库!

text ASP.NET MVC和JQUERY

ASP.NET MVC - jquery 日期选择器

asp.net mvc4 更改 jquery 版本

Three steps to use jQuery UI in ASP.NET MVC 5

自定义 asp.net mvc 3 jquery.validate.unobtrusive