ASP.NET-使用ActionLink时出现Getting 404错误

本文关键字:Getting 错误 NET- 使用 ActionLink ASP | 更新日期: 2023-09-27 18:06:52

我遇到了一个错误404,这意味着我缺少某些资源。

我对ASP.NET MVC真的没有经验,路由是我最糟糕的地方,尽管这对我来说是一个意想不到的错误,因为我有所需的控制器+操作。

1拉波特有许多ThrashType记录。它们是分开的桌子,尽管我认为在这一点上并不重要。

问题是我得到了Raport表的正确视图和记录。

当我将链接悬停在视图中时,它的格式为{host}/Raport/EditRecords/{string_id}

当我点击视图中的链接(试图转到EditRecords(时,我得到了404错误,这让atm感到困惑。

       public static void RegisterRoutes(RouteCollection routes)
        {                  
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
            "Home",
            "Edit/{productId}",
            new { controller = "Home", action = "Edit" },
            new { productId = @"'w+" }
            );
        } 

代码如下:

控制器编辑端口:

    public ActionResult EditRaport()
    {
       var query = from dbs in db.Raport
                    select dbs;
        return View(query as IEnumerable<Raport>);
    }

控制器编辑记录:

     public ActionResult EditRecords(string id)
    {
        var query = from dbs in db.ThrashType
                    where dbs.raport_id == id
                    select dbs;
        return View(query as IEnumerable<ThrashType>);
    }

EditRaport:视图

@model IEnumerable<WebApplication1.Klasy_Raport.Raport>
@{
    ViewBag.Title = "EditRaport";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Edit Raport</h2>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.UserFrontInfo.userName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.creation_time)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.last_modyfication)
        </th>
        <th></th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.UserFrontInfo.userName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.creation_time)
        </td>       
        <td>
            @Html.DisplayFor(modelItem => item.last_modyfication)
        </td>
        <td>
            @Html.ActionLink("Edit", "EditRecords", new { id=item.raport_id }) 
        </td>
    </tr>
}
</table>

你能告诉我错误可能在哪里吗?在这种情况下,我真的不理解404。

编辑:15:37 2016年9月13日

在@StephenMuecke的帮助下,我了解了问题的原因。他给了我一个链接,更详细地解释了这个问题:URL中的点导致ASP.NET mvc和IIS 出现404

事实上,我的身份证有点像"12.34.56 00:00:00bcde"。如果你尝试这样做,它会导致IE错误(404(。

答案是将ID更改为类似"1234560000000abcde"的内容,这使得IE可以进行处理。

在我的情况下,这完成了任务:

    //remove dots and colons from string
    var datePart = DateTime.Today.ToString().Replace(".", "").Replace(":","");
    //giving string properties and assigning for alias
    var namePart = User.Identity.Name.ToString();
    //removing @blablabl.ab - 12 signs, 13 is for the sake of correct      indexing
    var nameShort = namePart.Remove((namePart.Length)-13, 12);
    //final ID concatenation
    newRaport.raport_id = datePart + nameShort;

谢谢!

ASP.NET-使用ActionLink时出现Getting 404错误

     public static void RegisterRoutes(RouteCollection routes)
    {                  
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
        "Home",
        "Edit/{productId}",
        new { controller = "Home", action = "Edit" },
        new { productId = @"'w+" }
        );
    } 

删除RegisterRoutes中的以下路由:

 routes.MapRoute(
        "Home",
        "Edit/{productId}",
        new { controller = "Home", action = "Edit" },
        new { productId = @"'w+" }
        );