首页 > 解决方案 > MVC:AJAX 处的锚标记查询字符串不被控制器拾取

问题描述

我是 MVC 的新手,我来自 ASP Classic 背景。table我有以下edit button内容Datatable

表格编辑按钮

当我单击edit button我希望将它们各自的查询字符串传递AutoINCController并加载PasswordDet页面时。

编辑按钮的 Javascript AJAX 部分代码

"columns": [
                { "data": "LoginID", "orderable" : true },
                { "data": "Name", "orderable": true },
                { "data": "DateCreated", "orderable": true },
                {
                    "orderable":false,
                    "render": function (data, type, full, meta) {
                        return '<a href="/Password/PasswordDet/' + full.AutoINC + '"><img src="../../Content/myPics/edit-2-24.png" ></a>';
                    }
                },
            ],

控制器

我已经尝试了以下withwithout命名查询字符串

不命名查询字符串

试过了

public ActionResult PasswordDet(string AutoINC)
        {
            //**** AutoINC is always NULL****
            return View();
        }

使用命名查询字符串

使用 QueryString 名称尝试 B

public ActionResult PasswordDet()
        {
            string AutoINC = Request.QueryString["AutoINC"];
            //**** AutoINC is always NULL****
            return View();
        }

此外,我有一个不传递任何查询字符串的新按钮,我该如何处理 NULL

"buttons": [
                {
                    text: 'New',
                    className: "btn btn-default",
                    action: function (e, dt, node, config) {
                        window.location.href = '@Url.Action("PasswordDet", "Password")';
                    },
                }
            ],

标签: c#ajaxasp.net-mvcdatatablequery-string

解决方案


我假设您的默认路线如下所示:

routes.MapRoute(
   "Default",                                              // Route name
   "{controller}/{action}/{id}",                           // URL with parameters
   new { controller = "Home", action = "Index", id = UrlParameter.Optional}  // Parameter defaults
);

因此,使您的PasswordDet操作方法如下:

public ActionResult PasswordDet(int id)
{
    // do whatever you want to with id here
    return View();
}

现在localhost:50118/Password/PasswordDet/550肯定会映射到上面具有idvalue的 action 方法550


推荐阅读