2010-12-03 18 views
0

Asp.net 3.5 IIS 7 NHibernet www.sample.com Site hébergé dans un répertoire virtuelASP.NET MVC 2.0 IIS 7.0 et erreur 404

Son générer l'url «/sample/home/index "au lieu de «/home/index »

bien, l'application fonctionne avec l'URL ci-dessus, mais quand j'appelle toutes les données Ajax comme casecade dropdwonlist, je reviens 404.

Actions fonctionnent bien mais seulement quand je reviens Json (données) il retourne 404. J'ai essayé wi th à la fois GET et POST

code

[HttpPost] 
    public ActionResult GetSubCategories2(int id) 
    { 
     var data = from subCat in CategoryService.GetChildByParentCategory(
      CategoryService.GetCategoryByID(id)) 
        select new { Value = subCat.ID, Text = subCat.CategoryName }; 

     return Json(data); 
    } 

je un filtre de sécurité & Erreur gestionnaire

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method 
    , Inherited = true, AllowMultiple = false)] 
public class HandelRecordNotFound : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.Exception.Message.IndexOf("No row with the given identifier exists") > -1) 
     { 
      //filterContext.HttpContext.Response.Redirect("~/Admin/InvalidRequestOrRecordNotFound"); 
      filterContext.Result = new RedirectResult("~/Admin/InvalidRequestOrRecordNotFound"); 
      filterContext.ExceptionHandled = true; 
     } 

     if (filterContext.Exception.Message.IndexOf("The DELETE statement conflicted") > -1) 
     { 
      //filterContext.HttpContext.Response.Redirect("~/Admin/InvalidRequestOrRecordNotFound"); 
      filterContext.Result = new RedirectResult("~/Admin/InvalidRequestOrRecordNotFound"); 
      filterContext.ExceptionHandled = true; 
     } 
     //filterContext.Exception.Message 

    } 
} 

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method 
    , Inherited = true, AllowMultiple = false)] 
public class AdminAuthorization : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     base.AuthorizeCore(httpContext); 
     object userTypeObject = httpContext.Session["UserType"]; 

     if (userTypeObject == null || 
      (UserTypes)Enum.ToObject(typeof(UserTypes), userTypeObject) != UserTypes.Administrator) 
     { 
      return false; 
     } 
     return true; 
    } 
} 

Sauf ci-dessus tout est normal.

tous fonctionnent très bien sur le côté client, mais sur le serveur méthode JsonResult erreur retour 404.

Répondre

0

Votre application est installée dans un dossier virt appelé « échantillon » au lieu de la racine du site. Déplacez l'application, ajustez vos itinéraires ou utilisez l'URL correcte, y compris le préfixe '/ sample /'.

+0

Pas mon site principal client est en cours d'exécution sur la racine, donc je ne peut pas le déplacer à la racine. Je montre habituellement mon travail sur mon propre domaine dans un sous-domaine comme "http://client.wayzsoft.com", en ce sens que je n'ai jamais trouvé "wayzsoft" ou "client" dans les URL générées. Même sous-domaine sont également hébergés en tant que répertoire virtuel, comme je pense. Deuxièmement, j'ai un problème avec JsonResult pas avec ActionResult et le contenu –

2

Première remarque sur votre filtre d'action: changement

filterContext.Result = new RedirectResult("~/Admin/InvalidRequestOrRecordNotFound"); 

à:

var routes = new RouteValueDictionary(
    new { controller = "admin", action = "InvalidRequestOrRecordNotFound" } 
); 
filterContext.Result = new RedirectToRouteResult(routes); 

remarque est deuxième sur la façon dont vous appelez vos actions ajax. Vous devriez toujours utiliser les aides url pour générer des routes correctes et ne jamais les coder en dur dans vos scripts. Exemple:

Au lieu de:

$.get('/home/someajax', function(result) { 

}); 

Do:

$.get('<%= Url.Action("someajax") %>', function(result) { 

}); 
+0

Merci pour votre réponse mais InvalidRequestOrRecordNotFound est une vue, je suis juste rediriger pour voir. pour l'URL, j'utilise strictement Url.Action. –