【问题标题】:Parameter string is null when passed to controller from datatable从数据表传递到控制器时,参数字符串为空
【发布时间】:2019-07-04 09:51:43
【问题描述】:

我是 MVC 的新手。所以这可能是我提出的一个愚蠢的问题。

我正在尝试将参数发送到我的控制器,但我没有得到值。有人可以帮我做错什么吗?

在控制器中传递的用户名始终为空。从我遵循的示例中,它使用整数作为参数。当我使用 id 时,我将获得参数。但是当我传递字符串时,我会得到空值。请帮我。谢谢。

这里是风景

$(document).ready(function () {
        dataTable = $("#batchTable").DataTable({
            "ajax": {
                "url": "/Home/GetDPUserList",
                "type": "POST",
                "datatype": "json"
            },

            "columns": [
                { "data": "Username", "name":"Username" },
                { "data": "Name", "name": "Name"  },
                { "data": "Email", "name": "Email"  },
                { "data": "IsAdmin", "name": "IsAdmin" },
                {
                    "data": "Username", "render": function (data) {
                        return "<a class='btn btn-default btn-sm' onclick=EditUserForm('@Url.Action("UpdateUser","Home")/" + data +"')><i class='fa fa-pencil'></i> Edit</a><a class='btn btn-danger btn-sm'  style='margin-left: 5px' onclick=Delete(" + data +")><i class='fa fa-trash'></i> Delete</a>";
                    },
                    "orderable": false,
                    "searchable": false,
                    "width": "150px"
                },

            ],

            "processing": "true",
            "serverSide": "true",
            "order": [0, "asc"]
        });
    });

function EditUserForm(url) {
        alert(url)
        var formDiv = $('<div/>');

        $.get(url)
            .done(function (response) {
                formDiv.html(response);



                popup = formDiv.dialog({
                    autoOpen: true,
                    resizable: false,
                    title: "Add New User",
                    height: 410,
                    width: 300,
                    close: function () {
                        popup.dialog('destroy').remove();
                    }
                });
            });
    }

这里是控制器

[HttpGet]
    public ActionResult UpdateUser(string username = "")
    {
        if (string.IsNullOrEmpty(username))
        {
            return View(new DP_User());
        }
        else
        {
            using (DBModel db = new DBModel())
            {
                return View(db.DP_User.Where(x => x.Username == username).FirstOrDefault<DP_User>());
            }
        }
    }

【问题讨论】:

  • 将用户名作为查询字符串而不是参数传递。因为默认 mvc 路由期望变量名称为 id 而您使用的是 username
  • 正如Manprit所说。默认 mvc 路由需要变量名作为 id。你可以参考Route.Config。我已将表更改为使用 id。

标签: c# jquery asp.net-mvc model-view-controller


【解决方案1】:

在 Route.Config 中添加路由

routes.MapRoute(
         name: "namesomething",/// as per your naming convention 
         url: "Home/UpdateUser/{username}",
         defaults: new { controller = "Home", action = "UpdateUser", username = UrlParameter.Optional }
      );

【讨论】:

  • 感谢您提供此信息。但我决定更改我的表以传递 id 以遵循默认的 mvc 路由。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
相关资源
最近更新 更多