【问题标题】:Can not benefit from asp.net MVC Data Annotations & Html helpers when using dataTable jQuery plugin使用 dataTable jQuery 插件时无法从 asp.net MVC 数据注释和 Html 助手中受益
【发布时间】:2015-03-03 05:15:02
【问题描述】:

我正在做以下工作:-

  • asp.net mvc5 Web 应用程序。
  • dataTable jQuery 插件版本 1.10.4

但我注意到,如果我使用 dataTable 插件,我无法从这些 asp.net mvc 功能中受益:-

  • 我不能使用 html 助手。

  • 应用的数据注释将无效。

例如,我有以下脚本来实现 dataTable 插件:-

<script type="text/javascript">
        $(document).ready(function () {

            $('#myDataTable').dataTable({
                "serverSide": true,
                "ajax": "Home/AjaxHandler",
                "processing": true,
                "columns": [
                            { "data": "FName" },
                            { "data": "LName" },
                            { "data": "BDate" }
                ]
            });
        });
    </script>

还有下面的动作方法:-

 public ActionResult AjaxHandler(jQueryDataTableParamModel param)
            {
                var allCompanies = t.Emps;

                var result = allCompanies.Select(c=> new {c.FName, c.LName, c.BDate});
                           //  select new[] {  };

                return Json(new
                {
                    sEcho = param.sEcho,
                    iTotalRecords = allCompanies.Count(),
                    iTotalDisplayRecords = allCompanies.Count(),
                    aaData = result
                },
                                JsonRequestBehavior.AllowGet);
            }

还有以下观点:-

@{
    ViewBag.Title = "Home Page";
}





<table id="myDataTable" class="display">
    <thead>
        <tr>
            <th>FName</th>
            <th>LName</th>
            <th>BDate</th>

        </tr>
    </thead>
    <tbody></tbody>
</table> 

还有以下型号:-

namespace testplugins.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;

    public partial class Emp
    {
        public int EmpID { get; set; }
       [Display(Name = "First Name")]
        public string FName { get; set; }
        [Display(Name = "Last Name")]
        public string LName { get; set; }
        public Nullable<int> DeptID { get; set; }
        [DataType(DataType.Date)]
        public Nullable<System.DateTime> BDate { get; set; }

        public virtual Dept Dept { get; set; }
    }
}

例如,现在我不能使用Html.DisplayNameFor(a=&gt;a.FName) 并获取数据注释中定义的名称。而不是我需要手动编写 html 表头标签。

同样对于 Bdate,dataTable 中的值将显示为“/Date(315536​​524000)/”,所以我什至无法从 DataType.Date 数据注释中受益,如果我要使用 dataTable 插件编辑记录那么Required、stringlenght等数据注解也将不起作用。

请问有人可以就此提出建议吗?我可以将dataTable插件修改为更面向asp.net mvc吗?或者我在上面的代码中做错了什么?

【问题讨论】:

  • 您可以按照here所示的方法进行
  • @Aminul 我已经阅读了这个链接,它基本上让我在测试之后写了这个问题。因为正如您从示例中看到的那样,无法使用 html 帮助程序或从数据注释中受益......

标签: jquery asp.net-mvc razor asp.net-mvc-5 datatables


【解决方案1】:

这是您可以完成此任务的一种方法...

这只是创建一个小模板字符串,将其放入 JS 变量中,然后使用渲染函数输出该字符串以及 value 属性中的数据。

剃须刀:

@model testplugins.Models.Emp


<table id="myDataTable" class="display">
    <thead>
        <tr>
            <th>FName</th>
            <th>LName</th>
            <th>BDate</th>

        </tr>
    </thead>
    <tbody></tbody>
</table> 

<script type="text/javascript">
    var fnameTextBox = '@Html.TextBoxFor(m => m.FName)';
</script>

JS

<script type="text/javascript">
    $(document).ready(function () {

        $('#myDataTable').dataTable({
            "serverSide": true,
            "ajax": "Home/AjaxHandler",
            "processing": true,
            "columns": [
                    { "data": "FName" },
                    { "data": "LName" },
                    { "data": "BDate" }
            ],
            "render": function( data, type, row, meta ){
                 return fnameTextBox.replace('value=""', 'value="' + data + '"');
            }
         });
    });
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2011-03-06
    相关资源
    最近更新 更多