2009-11-25 4 views
2

Asp.net Mvc1 Sur mes Views/home/Index.aspx qui itinéraires de http://localhost/DefectSeverityAssessmentMvcBeta/Pourquoi le rendu Response.Write mais pas Html.ActionLink?

Cela rend

Response.Write("<a href=\""); 
    Response.Write(Url.Action("Create", "Registration")); 
    Response.Write("\">Begin Registration</a>"); 

Mais retourne une 404 pour l'adresse du lien http://localhost/DefectSeverityAssessmentMvcBeta/Registration/Create

alors que cela ne rend pas ou montrer en Afficher la source mais ne provoque aucune exception:

Html.ActionLink("Begin Registration", "Create", "Registration"); 

J'ai un RegistrationController et un /Views/Registration/Create.aspx Le contrôleur d'enregistrement a des points d'arrêt sur Index() et Create() mais ils ne sont pas touchés.

Je ne sais pas comment j'utiliser <%= %> dans ce scénario parce qu'il est entré dans le bloc de code suivant:

<% if (ViewData.ContainsKey("user")) 
    { 
     if (ViewData.ContainsKey("registered") && (bool)ViewData["registered"] == true) 
     { 
      //Html.RouteLink("Resume Assessment", "Assessment", new { controller = "Assessment", action = "Index" }); 
      Response.Write("<a href=\""); 
      // Html.ActionLink("Resume Assessment", "Index", "Assessment"); 

      Response.Write("\">Resume Assessment</a>"); 
     } 
     else 
     { 
      //Html.RouteLink("Begin", "Registration", new { controller = "Registration", action = "Edit" }); 
      // Html.ActionLink("Begin Registration", "Create", "Registration"); 
      Html.RouteLink("Begin", "Default", new { controller = "Registration", action = "Edit" }); 
      //Response.Write("<a href=\""); 

      //Response.Write(Url.Action("Create", "Registration")); 
      //Response.Write("\">Begin Registration</a>"); 
     } 


    } 
    else 
    { Response.Write("Authentication failed"); } 
      %> 
+0

intéressant il dit que la première manière donne un lien qui renvoie un 404. Je me demande si l'itinéraire existe? –

+0

ne devrait pas tomber dans la route par défaut? c'est dans la forme/controller/action – Maslow

Répondre

4

Utilisez-vous <%%> dans HTML pour Response.Write et Html.ActionLink? Essayez d'utiliser <% =%> pour Html.ActionLink (...);

Le signe égal ajouté appelle Response.Write dans les coulisses écrivant ainsi le code à l'écran.

+0

Je pensais que le signe = signifiait que c'était une expression. et vous ne pouvez pas utiliser les instructions If et les blocs de code dans ce droit? – Maslow

+0

+1 cette réponse est utile, je ne connaissais pas le Response.write dans les coulisses. – Maslow

+1

Vous pouvez envelopper les instructions if dans <% %> et le retour à la sortie effectivement dans <%= %> –

0

Utilisez-vous un signe égal dans votre changement de contexte, comme celui-ci?

<%= Html.ActionLink("Begin Registration", "Create", "Registration"); %> 
    ^--needs equals sign here 

Si vous n'utilisez pas de signe égal, vous devez écrire directement dans l'objet Response.

En ce qui concerne les erreurs de routage, vous pouvez consulter vos itinéraires en utilisant l'outil de diagnostic de Phil Haack au http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx.

Tout ce qui est inférieur à IIS7 requires special configuration pour le routage.

+0

J'ai mis à jour la question pour inclure pourquoi je n'utilise pas le '=' – Maslow

+0

Ensuite, vous devriez juste utiliser Response.Write. Le 404 ressemble à un problème de routage. –

+0

Comment diagnostiquer le problème de routage? – Maslow

2

Parce que Html.ActionLink renvoie la chaîne et n'écrit pas dans le flux de réponse. Vous devez écrire à votre page en utilisant <%= %> ou Response.Write();

Response.Write(Html.ActionLink("Begin Registration", "Create", "Registration")); 
0

je ne faisais pas usage de la possibilité d'utiliser

<% if(x) {%> <%=Html.ActionLink(...)%><% } %> 

Merci à Charles Conway Je l'ai travail. Voici le code que j'ai fini avec:

<div class="entry"> 
<% if (ViewData.ContainsKey("user")) 
    { 
     if (ViewData.ContainsKey("registered") && (bool)ViewData["registered"] == true) 
     { %> 
      <%=Html.ActionLink("Resume Assessment", "Index", "Assessment") %> 

     <% } 
     else 
     { %> <%=Html.ActionLink("Begin Registration", "Create", "Registration") %> 

      <% 
     } 


    } 
    else 
    { Response.Write("Authentication failed"); } 
      %></div> 
Questions connexes