"无法找到资源"尝试过滤网页上的项目时出错,MVC

时间:2018-01-05 15:36:51

标签: asp.net-mvc razor

我想在我的网站上过滤产品。但是当我点击我的过滤器按钮时,我收到了无法找到资源的错误消息。

描述:HTTP 404.资源或其任何依赖项可能已被删除,重命名或暂时不可用。检查下面的网址,确保拼写正确。 请求的URL:/Views/Product/Index.cshtml

这是我的过滤器(简化):

<form action="~/Views/Product/Index.cshtml" 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>

我没有向控制器添加任何代码。我不知道这是不是问题,但我也不知道我必须在控制器中添加什么。

希望有人能帮助我解决这个问题。

初学者。

2 个答案:

答案 0 :(得分:0)

这是链接到视图

"~/Views/Product/Index.cshtml"

您不想链接到某个页面,而是希望链接到控制器上的操作。例如,如果您有控制器操作,例如:

public class ProductsController : Controller
{
    public ActionResult Create(Product product)
    {
        // code to create a "product"
    }
}

然后,至少使用默认路由约定(除非您修改它们),URL将类似于:

"/Products/Create"

(注意:在上面的代码中,我使用的是“Products”而不是“Product”。它可能是一个轻微的挑剔,但从语义上来说,它通常更适合复数集合。而这些动作的RESTful URL是关于什么的在语义上是一个集合。)

在MVC中,您不会创建彼此交互的“页面”。您正在创建“控制器”,这些“控制器”由请求调用,使用“模型”执行逻辑,并直接控制到“视图”以将结果呈现给用户。

ASP.NET MVC Framework提供了各种工具来帮助简化其中的大部分工作,例如提供“HTML Helpers”,它将根据路由规则和指定的控制器/操作为您确定URL。你一定要好好学习ASP.NET MVC上的一些教程,并继续对如何使用框架有更多的了解。

答案 1 :(得分:-1)

问题是服务器无法找到所请求的内容。

您需要将其添加到控制器:

public class ProductController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

您需要将Index.cshtml添加到文件夹Views enter image description here

下的产品文件夹中

如果要将参数传递给页面以应用过滤器:

public class ProductController : Controller
{
   public ActionResult Index()
   {
    // Populate products or from a database
        List<Product> products = new List<Product>();
    Product prod = new Product();
    prod.Name = "My Product";
    products.Add(prod);
    return View(products);
  }
}

模型在Models:

文件夹下看起来像这样
public class Product
{
    public string Name { get; set; }
}

然后Index.cshtml会有这样的模型:

   @model List<Product>
@foreach (var product in Model)
{
<p> @product.Name </p>
}

仅作为示例,如果您只想从下拉菜单中显示所选产品,则此表格是您要创建的表单:

        @model List<Product>
    @using (@Html.BeginForm("FilterProduct", "Product", new { enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()
        <select id="filter" name="filter" multiple>
            <option value="">Products</option>
            @foreach (var product in Model)
            {
                <option value="@product.Name">@product.Name</option>
            }
        </select>
      <button type="submit" id="button" class="btn btn-default">filter!!! 
</button>

    }

所以现在你的控制器看起来像这样:

public class ProductController : Controller
{
      public ActionResult Index()
      {
            // Populate products or from a database
            List<Product> products = new List<Product>();
            Product prod = new Product();
            prod.Name = "My Product";
            products.Add(prod);
            return View(products);
      }

      public ActionResult FilterProduct(string[] filter)
      {
          // Filter your list of products based on the parameter
          return View("Index", products);
      }
}