ASP.NET核心参数未传递给Action Get Method

时间:2018-04-23 18:23:53

标签: jquery asp.net-mvc

在这里,我有一个保存数据的Action方法。

如果ID为null,则返回空对象。 如果ID有值,它将尝试在数据库中找到值。

[HttpGet]
public async Task<ActionResult> Save(string pID)
{
    if (pID == null)
        return View(new TestCaseViewModel());
    else 
        return View(await m_TestCaseManager.FindByID(pID));
}

在我的javascript中,我使用生成href的{​​{3}}:

var oTable = $('#myDatatable').DataTable({
    "ajax": {
        "url": '/home/GetTestCases',
        "type": "get",
        "datatype": "json"
    },
    "columns": [{
            "data": "Name",
            "autoWidth": true
        },
        {
            "data": "Desc",
            "autoWidth": true
        },
        {
            "data": "IsActive",
            "autoWidth": true
        },
        {
            "data": "ID",
            "width": "50px",
            "render": function(pID) {
                return '<a class="popup" href="/home/save/pID=' + pID + '">Edit</a>';
            }
        },
        {
            "data": "ID",
            "width": "50px",
            "render": function(pID) {
                return '<a class="popup" href="/home/delete/pID=' + pID + '">Delete</a>';
            }
        }
    ]
}) 

enter image description here

但是,即使HTML看到了ID,该函数也永远不会收到它。想法?

2 个答案:

答案 0 :(得分:3)

/替换为?,如下所示:

/home/save?pID=aksl09-12kjh8-198273

答案 1 :(得分:0)

你的链接错误..看起来你正在做一个糟糕的url参数路由和常规GET参数混合。你需要做任何一种,或者不是你想要的混合物。

要执行真正的GET参数,请将链接更改为以下内容。请注意,将最终/更改为?以表示GET参数。

<a href="/home/save?pID=PIDHERE">Edit</a> 

要执行url路由参数,您需要编辑启动文件并在添加MVC时创建路由。在启动文件中有类似的东西。

app.UseMvc(routes =>
{
    routes.MapRoute(
       name: "default",
       template: "{controller=Home}/{action=Index}/{pid?}");              
});

然后将您的链接更改为以下

<a href="/home/save/PIDHERE">Edit</a>