【问题标题】:routing problems in razor pages剃须刀页面中的路由问题
【发布时间】:2020-11-28 18:55:37
【问题描述】:

这个已经让我发疯了几个星期了,所以如果有人能指出我正确的方向,我将非常感激。

我正在使用 .net core 和 Razor Pages 开发一个相对简单的 CRUD 应用程序。

我已经使用 Visual Studio 2019 社区启动了一个新应用程序,并且我要求提供标准 CRUD 选项。通过一些调整和数据库创建,应用程序运行良好。这是名为“类别”的表的标准 .net 核心表显示

但是,我想要一个更漂亮的表格,所以我尝试使用来自一些 JavaScript 的 ajax 调用。

在我的页面上

    <div class="col-12 border p-3">

        <table id="DT_load" class="table table-striped table-bordered" style="width:100%">
            <thead>
                <tr>
                    <th>Id</th>
                    <th>Name</th>
                    <th>In Use?</th>


                </tr>
            </thead>
        </table>
    </div>

</div>
@section Scripts
{

    <script src="~/js/categoryList.js"></script>

}

这指向这个Javascript

var dataTable;


$(document).ready(function () {
    loadDataTable();
    alert($('#DT_load').html())
    });

    function loadDataTable() {

    dataTable = $('#DT_load').dataTable
         ({
            "ajax":
            {
                "url": "/controllers/categories",
                "type": "GET",
                "datatype": "json"
            },
            "columns":
                [
                  { "data": "id", "width": "50%" },
                  { "data": "category", "width": "50%" },
                  { "data": "inUse", "width": "50%" },
                ],
            "language":
                {
                "emptyTable": "no data found"
            },
            "width": "100%"
        });
}

这应该............然后访问这个控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Investments10.Models;

namespace Investments10
{
[Route("api/Category")]
//[Route("api/CategoryController")]
[ApiController]
public class CategoriesController : ControllerBase
{
    private readonly aspnetInvestments1053bc9b9d9d6a45d484292a2761773502Context _context;

    public CategoriesController(aspnetInvestments1053bc9b9d9d6a45d484292a2761773502Context context)
    {
        _context = context;
    }

    // GET: api/Categories
    [HttpGet]
    public async  Task<ActionResult> GetAllCategory()

    {

        return new JsonResult (new { data = await _context.Category.ToListAsync() });
    }

    // GET: api/Categories/5
    [HttpGet("{id}")]
    public async Task<ActionResult<Category>> GetCategory(int id)
    {
        var category = await _context.Category.FindAsync(id);

        if (category == null)
        {
            return NotFound();
        }

        return category;
    }

但是,它永远不会到达控制器。我在控制器中设置了几个断点,但它没有到达那里。我怀疑问题出在我为 Ajax 调用指定的 URL 中,但我尝试了一大堆变体,但似乎没有一个可以让调用访问控制器。

文件结构如下。

特别令人恼火的是,我知道这种技术是有效的,因为我在别人的项目中有一个几乎相同的例子,效果很好。

我们将非常感激任何帮助。谢谢!

【问题讨论】:

    标签: javascript c# ajax visual-studio asp.net-core-3.1


    【解决方案1】:

    添加您的操作路线属性,如下所示:

    .........
    
        [Route("~/api/Category/GetAllCategory")]
        public async  Task<ActionResult> GetAllCategory()
    
      ............
    
       [Route("~/api/Category/GetCategory/{id}")]
        public async Task<ActionResult<Category>> GetCategory(int id)
      
    .......
    
    

    对于未来,最好不要在操作中使用 GET 、 POST 等。计算机更清楚该请求使用什么。

    【讨论】:

    • 谢谢谢尔盖。非常感激。我会试试看。
    【解决方案2】:

    啊哈!我发现了这个问题。为了在控制器中使用路由,我需要添加一行

                endpoints.MapControllers();
    

    进入我的 startup.cs 文件

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2020-05-30
      • 2020-07-09
      • 2018-12-04
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多