You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC网站产品筛选时出现“Ressource cannot be found”404错误求助

解决ASP.NET MVC产品筛选的404错误问题

嘿,作为新手遇到这个问题太正常了,咱们一步步拆解解决:

问题根源

你碰到的404错误核心原因是ASP.NET MVC(或ASP.NET Core MVC)的请求逻辑和你想的不一样——你不能直接把表单的action指向视图文件(比如~/Views/Product/Index.cshtml)。因为:

  1. Views目录默认被服务器保护,不允许直接通过URL访问;
  2. MVC的请求是通过控制器的动作方法处理的,而非直接访问视图的物理路径。

解决步骤(从0开始)

1. 创建/完善Product控制器

如果还没有,在项目里新建ProductController.cs文件,代码示例如下:

using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc; // 若是ASP.NET Core,替换为using Microsoft.AspNetCore.Mvc;

// 先定义一个基础的Product模型(你可以根据实际需求修改)
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
}

public class ProductController : Controller
{
    // 模拟从数据库获取产品数据的方法
    private List<Product> GetAllProducts()
    {
        return new List<Product>
        {
            new Product { Id = 1, Name = "产品A", Category = "option1" },
            new Product { Id = 2, Name = "产品B", Category = "option2" },
            new Product { Id = 3, Name = "产品C", Category = "option3" }
        };
    }

    // 处理Product/Index的GET请求,接收category筛选参数
    public ActionResult Index(string category) // ASP.NET Core用IActionResult作为返回类型
    {
        // 获取全部产品数据
        var products = GetAllProducts();

        // 如果用户选择了分类,执行筛选逻辑
        if (!string.IsNullOrEmpty(category))
        {
            products = products.Where(p => p.Category == category).ToList();
        }

        // 把筛选后的产品列表传给视图
        return View(products);
    }
}

2. 修改表单的提交路径

把表单的action改成指向控制器的Index动作,推荐用Url.Action生成正确路由(这样不管路由配置怎么变都不会出错):

<form action="@Url.Action("Index", "Product")" method="get">
    <div class="row">
        <div class="row">
            <select class="event-type-select" name="category">
                <optgroup label="optgroup1">
                    <option>option1</option>
                    <option>option2</option>
                </optgroup>
                <optgroup label="optgroup2">
                    <option>option3</option>
                </optgroup>
            </select>
        </div>
        <div class="row">
            <button type="submit" id="button" class="btn btn-default">filter!!!</button>
        </div>
    </div>
</form>

3. 更新视图以显示筛选结果

打开Views/Product/Index.cshtml,改成强类型视图,这样才能接收控制器传递的产品列表:

@model List<Product> <!-- 声明视图的模型类型 -->

<h2>产品列表</h2>

<!-- 嵌入筛选表单 -->
<form action="@Url.Action("Index", "Product")" method="get">
    <div class="row">
        <div class="row">
            <select class="event-type-select" name="category">
                <optgroup label="optgroup1">
                    <!-- 选中当前筛选的分类,提升用户体验 -->
                    <option @(Request.Query["category"] == "option1" ? "selected" : "")>option1</option>
                    <option @(Request.Query["category"] == "option2" ? "selected" : "")>option2</option>
                </optgroup>
                <optgroup label="optgroup2">
                    <option @(Request.Query["category"] == "option3" ? "selected" : "")>option3</option>
                </optgroup>
            </select>
        </div>
        <div class="row">
            <button type="submit" id="button" class="btn btn-default">filter!!!</button>
        </div>
    </div>
</form>

<!-- 展示筛选后的产品 -->
<div class="product-list">
    @if (Model.Count == 0)
    {
        <p>没有找到匹配的产品</p>
    }
    else
    {
        <ul>
            @foreach (var product in Model)
            {
                <li>@product.Name - 分类:@product.Category</li>
            }
        </ul>
    }
</div>

为什么这样能解决问题?

当你点击筛选按钮时,表单会把category参数提交到Product/Index路由,控制器的Index方法接收参数后执行筛选逻辑,再把结果传给视图展示——完全符合MVC"控制器处理逻辑,视图负责展示"的设计思想,自然就不会出现404错误了。

如果是ASP.NET Core项目,代码细节会有小差异(比如命名空间、返回类型),但核心逻辑完全一致,你可以根据项目类型调整。

内容的提问来源于stack exchange,提问作者usernumber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:17:00