【问题标题】:Access asp.net mvc controller ActionResult访问asp.net mvc控制器ActionResult
【发布时间】:2013-04-10 12:14:33
【问题描述】:

我想在控制器中访问动作结果(我的控制器是 HotelController 动作是索引)

(http://localhost:9001/Hotel/Index) 它给出以下错误

找不到资源。

描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的网址:/Hotel/Index

酒店控制器

public class HotelController : Base.BoxyController
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            ViewBag.Title = "SonDakka - Otel";
        }

        public ActionResult Index(string culture)
        {

…………

BoxyController

 public class BoxyController : MainController
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

.......

主控制器

  public class MainController : SiteController
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

......

网站控制器

  [ExitHttpsIfNotRequired]
    public class SiteController : Controller
    {
        public Account Me { get; set; }

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {

.......

这是我的 global.asax

using System;
using System.Data.Entity;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using System.Web.Routing;
using Tourism.Data;
using Tourism.Data.Mvc.Authorization;
using Tourism.Data.Mvc.Routing;

namespace Tourism
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(TourismContext db, RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            var cultures = db.Cultures.Select(c => c.Code).ToArray();

            routes.MapRoute
                (
                    "Ajax",
                    "{culture}/{controller}/{action}/{id}",
                    new { id = UrlParameter.Optional },
                    new { culture = new ArrayRouteConstraint(true, cultures), controller = new ArrayRouteConstraint(true, "Ajax") }
                ).RouteHandler = new GlobalizedRouteHandler();

            routes.Add
                (
                    "Page",
                    new GlobalizedPageRoute
                        (
                            "{culture}/{path}",
                            null,
                            new RouteValueDictionary { { "culture", new ArrayRouteConstraint(true, cultures) } },
                            new GlobalizedRouteHandler()
                        )
                );

            routes.Add
                (
                    "Route",
                    new GlobalizedRoute
                        (
                            "{culture}/{path}/{slug}/{id}",
                            new RouteValueDictionary { { "culture", UrlParameter.Optional }, { "path", UrlParameter.Optional }, { "slug", UrlParameter.Optional }, { "id", UrlParameter.Optional } }, 
                            new RouteValueDictionary { { "culture", new ArrayRouteConstraint(false, cultures) } },
                            new GlobalizedRouteHandler()
                        )
                );
        }

        protected void Application_Start()
        {
            Database.SetInitializer<TourismContext>(null);

            using (var db = new TourismContext())
            {
                #if !DEBUG

                if (!db.Database.CompatibleWithModel(true))
                {
                    System.Web.HttpRuntime.UnloadAppDomain();

                    throw new Exception("Veritabanı değişikliği tespit edildi.");
                }

                #endif

                AreaRegistration.RegisterAllAreas();

                RegisterGlobalFilters(GlobalFilters.Filters);

                RegisterRoutes(db, RouteTable.Routes);
            }
        }

        protected void Application_PostAuthenticateRequest()
        {
            if (Request.IsAuthenticated)
            {
                Context.User = System.Threading.Thread.CurrentPrincipal =
                    new AuthorizationPrincipal(Context.User.Identity);
            }
        }
    }
}

【问题讨论】:

  • “请求的 URL:/Hotel/Thanks” - 这是错误的一部分吗?如果是,那么您有一个名为“Thanks”的方法吗?
  • 我应该更新问题...我尝试访问索引它给出的错误比我尝试感谢它仍然给出一些错误...localhost:9001/Hotel/Index
  • 你能发布你的路线配置吗?请编辑您的帖子并将其包含在内。
  • 我发布 global.asax 并包含代码...感谢 von v.

标签: asp.net-mvc asp.net-mvc-3 compiler-errors asp.net-mvc-routing


【解决方案1】:

因为这是由于 Razor 引擎无法在酒店控制器中找到Thanks 操作。您需要在 Hotel 控制器中执行Thanks 操作,如下所示:

public class HotelController : Base.BoxyController
{

 public ActionResult Thanks(string culture)
 {
    return View();
 }

}

还要确保使用您的 html 代码在 Hotel 文件夹中创建一个视图。

【讨论】:

  • 我更新了问题...我编辑了我的问题错误...我的 HotelController 有感谢和索引操作...
  • localhost:9001/Hotel/Index 我打电话给这个,这给出了错误....并且 HotelController 有索引操作结果.....公共 ActionResult 索引(字符串文化)....
【解决方案2】:

根据您发布的路由配置,您的 URL 应为culture,例如:

http://localhost:9001/en/Hotel/Index

注意Hotel 之前的en。它可以是在您的数据库中有效的任何值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多