这个来自 jquery 的模型绑定,有什么问题吗?

发布于 2024-09-07 08:02:46 字数 631 浏览 5 评论 0原文

我有以下操作:

public JsonResult GetGridCell(double longitude, double latitude)
{
    var cell = new GridCellViewModel { X = (int)Math.Round(longitude.Value, 0), Y = (int)Math.Round(latitude.Value, 0) };
    return Json(cell);             
}

我使用以下 jquery 调用它:

$.post('Grid/GetGridCell', { longitude: location.longitude, latitude: location.latitude },
    function (data) {
        InsertGridCellInfo(data);
    });

GetGridCell 操作中的参数从未被填充(它们为空)。 调试时,我可以看到我的 Request.Form[0] 被称为经度并且具有正确的值。纬度也是如此。

当我使用完全相同的代码,但使用 $.get 时,一切正常。

我做错了什么?

I have the following action:

public JsonResult GetGridCell(double longitude, double latitude)
{
    var cell = new GridCellViewModel { X = (int)Math.Round(longitude.Value, 0), Y = (int)Math.Round(latitude.Value, 0) };
    return Json(cell);             
}

I'm calling it with the following jquery:

$.post('Grid/GetGridCell', { longitude: location.longitude, latitude: location.latitude },
    function (data) {
        InsertGridCellInfo(data);
    });

The parameters in my GetGridCell action are never filled (they are null).
When debugging I can see that my Request.Form[0] is called longitude and has the correct value. Same goes for latitude.

When I use the exact same code, but with a $.get everything works fine.

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海未深 2024-09-14 08:02:46

不太确定你做错了什么...你有“Grid/GetGridCell”的路由条目吗?

尝试使用 AcceptVerbs 属性装饰您的 JsonResult 方法,为 Get 创建一个单独的方法,为 Post 创建另一个方法。

在快速测试(对我来说)下,没有任何路由条目,我能够传递值:

使用以下示例来发布值:

$.post('Home/GetGridCell', { longitude: 11.6, latitude: 22.2 },
function(data) {
    alert(data);
});

使用 $.get 代替调用

    [AcceptVerbs(HttpVerbs.Get)]
    public JsonResult GetGridCell(double longitude, double latitude)
    {
        var cell = new GridCellViewModel { X = (int)Math.Round(longitude), Y = (int)Math.Round(latitude) };
        return Json(cell);
    }

$.post 调用

    [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult GetGridCell(double longitude, double latitude, FormCollection collection)
    {
        var cell = new GridCellViewModel { X = (int)Math.Round(longitude), Y = (int)Math.Round(latitude) };
        return Json(cell);
    }

Not too sure what you are doing wrong... Have you any route entry for 'Grid/GetGridCell'?

Try decorating your JsonResult method with the AcceptVerbs attribute, creating a separate one method for Get and another for Post

Under a quick test (for me) without any route entry I was able to pass the values:

Using the following for example to post the values:

$.post('Home/GetGridCell', { longitude: 11.6, latitude: 22.2 },
function(data) {
    alert(data);
});

using $.get intead calls

    [AcceptVerbs(HttpVerbs.Get)]
    public JsonResult GetGridCell(double longitude, double latitude)
    {
        var cell = new GridCellViewModel { X = (int)Math.Round(longitude), Y = (int)Math.Round(latitude) };
        return Json(cell);
    }

and

$.post calls

    [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult GetGridCell(double longitude, double latitude, FormCollection collection)
    {
        var cell = new GridCellViewModel { X = (int)Math.Round(longitude), Y = (int)Math.Round(latitude) };
        return Json(cell);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文