MVC 4应用程序重定向提供HTTP错误404.0 - 未找到

时间:2014-09-16 13:50:30

标签: c# asp.net-mvc-4

我有一个具有以下文件夹结构的MVC 4应用程序:

Controllers
 >Table10Controller.cs
Views
 >Billing
   >>PercentageInstallmentTable.cshtml
 >Table10
   >>Create.cshtml
   >>Edit.cshtml
   >>Details.cshtml
   >>Delete.cshtml

PercentageInstallmentTable.cshtml包含以下actionlinks

@Html.ActionLink("Create New", "..\\Table10\\Create")
@Html.ActionLink("Edit", "..\\Table10\\Edit", new { id = item.PID }) 
@Html.ActionLink("Details", "..\\Table10\\Details", new { id = item.PID }) 
@Html.ActionLink("Delete", "..\\Table10\\Delete", new { id = item.PID })

正确编辑,详细信息和删除所有重定向。出于某种原因,对于创造我得到了

  

HTTP错误404.0 - 未找到。您要查找的资源已被删除,名称已更改或暂时不可用。

即使该文件存在且与edit / details / delete位于同一文件夹中。

昨天我注意到了这个问题,并从Table10文件夹中删除了Create.cshtml,然后将其放回到那里修复了问题。今天,这个解决方案还没有成功,我无法让它发挥作用。发生了什么?

我将actionlink更改为

 @Html.ActionLink("Create New", "Create", "Table10")

这会显示路径localhost:51269 / Table10 / Create这是正确的,当我换掉其他数量的表时,我已经完成了(即; localhost:51269 / Table8 / Create)这些工作。不幸的是,对于表10,我仍然在Create上获得相同的404。

如果这有用,这里是Table10Controller.cs

  using System;
  using System.Collections.Generic;
  using System.Data;
  using System.Data.Entity;
  using System.Linq;
  using System.Web;
  using System.Web.Mvc;
  using BillingApp.Models;

namespace BillingApp.Controllers
{
public class Table10Controller : Controller
{
    private BillingUIEntities db = new BillingUIEntities();

    //
    // GET: /Table10/

    public ActionResult Index()
    {
        return View(db.PERCENTAGE_INSTALLMENT_TABLE.ToList());
    }

    //
    // GET: /Table10/Details/5

    public ActionResult Details(int id = 0)
    {
        PERCENTAGE_INSTALLMENT_TABLE percentage_installment_table = db.PERCENTAGE_INSTALLMENT_TABLE.Find(id);
        if (percentage_installment_table == null)
        {
            return HttpNotFound();
        }
        return View(percentage_installment_table);
    }

    public ActionResult View(int id = 0)
    {
        PERCENTAGE_INSTALLMENT_TABLE percentage_installment_table = db.PERCENTAGE_INSTALLMENT_TABLE.Find(id);
        if (percentage_installment_table == null)
        {
            return HttpNotFound();
        }
        return View(percentage_installment_table);
    }

    //
    // GET: /Table10/Create

    public ActionResult Create()
    {
        return View();
    }

    //
    // POST: /Table10/Create

    [HttpPost]
    public ActionResult Create(PERCENTAGE_INSTALLMENT_TABLE percentage_installment_table)
    {
        if (ModelState.IsValid)
        {
            db.PERCENTAGE_INSTALLMENT_TABLE.Add(percentage_installment_table);
            db.SaveChanges();
            return RedirectToAction("../Billing/PercentageInstallmentTable");
        }

        return View(percentage_installment_table);
    }

    //
    // GET: /Table10/Edit/5

    public ActionResult Edit(int id = 0)
    {
        PERCENTAGE_INSTALLMENT_TABLE percentage_installment_table = db.PERCENTAGE_INSTALLMENT_TABLE.Find(id);
        if (percentage_installment_table == null)
        {
            return HttpNotFound();
        }
        return View(percentage_installment_table);
    }

    //
    // POST: /Table10/Edit/5

    [HttpPost]
    public ActionResult Edit(PERCENTAGE_INSTALLMENT_TABLE percentage_installment_table)
    {
        if (ModelState.IsValid)
        {
            db.Entry(percentage_installment_table).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("../Billing/PercentageInstallmentTable");
        }
        return View(percentage_installment_table);
    }

    //
    // GET: /Table10/Delete/5

    public ActionResult Delete(int id = 0)
    {
        PERCENTAGE_INSTALLMENT_TABLE percentage_installment_table = db.PERCENTAGE_INSTALLMENT_TABLE.Find(id);
        if (percentage_installment_table == null)
        {
            return HttpNotFound();
        }
        return View(percentage_installment_table);
    }

    //
    // POST: /Table10/Delete/5

    [HttpPost, ActionName("Delete")]
    public ActionResult DeleteConfirmed(int id)
    {
        PERCENTAGE_INSTALLMENT_TABLE percentage_installment_table = db.PERCENTAGE_INSTALLMENT_TABLE.Find(id);
        db.PERCENTAGE_INSTALLMENT_TABLE.Remove(percentage_installment_table);
        db.SaveChanges();
        return RedirectToAction("../Billing/PercentageInstallmentTable");
    }

    protected override void Dispose(bool disposing)
    {
        db.Dispose();
        base.Dispose(disposing);
    }
}
}

更新:我备份了Table10及其内容以及Table10Controller.cs。然后我将它们全部删除,创建了一个新的Table 10控制器,带有选项" MVC控制器,带有读/写操作和视图,使用Entity Framework",因此Table10文件夹将使用新编辑/删除/详细信息/创建创建。然后我复制了控制器的内容并查看了新创建的文件。创建仍然无法查看,但所有其他人都可以。我只是......不明白这一点。

解决了问题,我需要更仔细地看一下控制器 - 有一个actionresult View我不知道为什么它在那里。删除它,一切都很好。

1 个答案:

答案 0 :(得分:0)

你正在尝试做一些奇怪的事情。 你在打电话

@Html.ActionLink(string label, string actionName)

您的第二个参数不是动作名称,因为它指向不同的文件夹(看起来像是视图的网址)

要纠正此问题: 在Table10Controller中添加以下操作: 创建,细节...... 然后在你看来,你可以打电话

@Html.ActionLink(string label, string controllerName, string actionName) 
像这样:

@Html.ActionLink("Create", "Table10", "Create")

或者如果您需要添加一些参数(例如您尝试传递给控制器​​的ID)

@Html.ActionLink(string label, string controllerName, string actionName, object routeValue) 
像这样:

@Html.ActionLink("Create", "Table10", "Create", new { Id = item.PID })

通过执行此操作,您将在名为“Table10”的控制器上调用名为“Create”的操作,并在视图中使用标签“Create”。

生成的HTML将是:

<a href="Table10/Create">Create</a>

如果您尝试在当前视图中呈现视图,则应使用

@Html.RenderPartial(string viewName) 

您可以使用“.. \ x \ y \ z \ view”。