发现不可能发布简单的ajax

时间:2018-11-16 15:12:02

标签: c# asp.net-core razor-pages

我真的很努力与此,并会提出任何建议。

我有这个字段

<input id="scanInput" type="text" placeholder="SCAN" class="form-control" />

当字段更改时我想为此进行ajax调用,所以我尝试了

<script>
$("#scanInput").change(function () {
    console.log('ye');

    $.getJSON("?handler=GetPartDetails", function (data) {
        //Do something with the data.
        console.log('yay?');
     }).fail(function (jqxhr, textStatus, error) {
        var err = textStatus + ", " + error;
        console.log("Request Failed: " + err);
        });
});
</script>

我的PageModel使用此方法的地方

[HttpPost]
public IActionResult GetPartDetails()
{
    return new JsonResult("hello");
}

,相关页面的网址为/packing/package/{id}

现在,当我更改输入值时,我在控制台上看到ye,并且可以看到状态为 200的名为http://localhost:7601/Packing/Package/40?handler=GetPartDetails(我认为正确的URL?)的网络。

但是我在GetPartDetails中的断点从未命中,并且在控制台中看不到yay?

我还从fail处理程序中看到了此消息:

  

请求失败:parsererror,语法错误:JSON.parse:JSON数据第3行第1列的意外字符

但是我什至没有传递任何JSON数据...为什么必须这样做 我也尝试过这种方式:

$.ajax({
    type: "POST",
    url: "?handler=GetPartDetails",
    contentType : "application/json",
    dataType: "json"
})

但我知道

  

XML解析错误:找不到元素   位置:http://localhost:7601/Packing/Package/40?handler=GetPartDetails   第1行,第1列:

我也尝试过

$.ajax({
    url: '/?handler=Filter',
    data: {
        data: "input"
    },
    error: function (ts) { alert(ts.responseText) }
})
    .done(function (result) {
        console.log('done')
    }).fail(function (data) {
        console.log('fail')
    });

有动作

    public JsonResult OnGetFilter(string data)
    {
        return new JsonResult("result");
    }

但是在这里我在控制台中看到了结果文本,但是我的断点从不执行操作,也没有网络错误......... 我在做什么错了?

3 个答案:

答案 0 :(得分:0)

对不起,我未发布此答案,我希望在评论部分中这样做,但我还没有特权。

您的PageModel看起来不是这样吗?

[HttpPost]
public IActionResult GetPartDetails() {
  return new JsonResult {
    Text = "text", Value = "value"
  };
}

答案 1 :(得分:0)

我以某种方式找到了可以使用的设置,但我不知道为什么。

PageModel

    [HttpGet]
    public IActionResult OnGetPart(string input)
    {
        var bellNumber = input.Split('_')[1];
        var partDetail = _context.Parts.FirstOrDefault(p => p.BellNumber == bellNumber);

        return new JsonResult(partDetail);
    }

剃刀页

$.ajax({
    type: 'GET',
    url: "/Packing/Package/" + @Model.Package.Id,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: {
        input: barcode,
        handler: 'Part'
    },

    success: function (datas) {
        console.log('success');
        $('#partDescription').html(datas.description);
    }
});

答案 2 :(得分:0)

对于此问题,它与Razor页面处理程序有关。对于default handler routing

  

HTTP动词的处理程序方法(“未命名”处理程序方法)遵循   约定:On [Async](附加Async是可选的,但   建议用于异步方法)。

对于您的原始帖子,请按照以下步骤操作:

  • GetPartDetails更改为OnGetPartDetails,其处理程序为PartDetails,http动词为Get
  • 删除[HttpPost]之前已定义Get动词的OnGet
  • 客户请求

     @section Scripts{ 
    <script type="text/javascript">
        $(document).ready(function(){
            $("#scanInput").change(function () {
                console.log('ye');
    
                $.getJSON("?handler=PartDetails", function (data) {
                    //Do something with the data.
                    console.log('yay?');
                }).fail(function (jqxhr, textStatus, error) {
                    var err = textStatus + ", " + error;
                    console.log("Request Failed: " + err);
                });
            });
        });
    </script>
    }
    

您还可以通过点击上面的链接来自定义规则,以替换默认的页面应用模型提供者