42 Stimmen

Abrufen der aktuellen Ansicht Name in ASP.NET MVC?

Ich habe eine partielle Ansicht (Steuerung), die über mehrere Ansichtsseiten verwendet wird, und ich muss den Namen der aktuellen Ansicht zurück an den Controller übergeben - so, wenn es z.B. Validierungsfehler gibt, kann ich die ursprüngliche Ansicht neu zu zeichnen.

Eine Umgehung wäre (in den Controller-Methoden) wie folgt

var viewName = "Details"; // or whatever
ViewData["viewName"] = viewName;
return(View(viewName, customer));

und dann in dem Teilstück selbst, geben Sie es als

<input type="hidden" name="viewName" 
    value="<%=Html.Encode(ViewData["viewName"])%>" />

Frage ist - gibt es einige Eigenschaft oder Syntax, die ich verwenden können, um diese direkt abrufen, anstatt es aus dem Controller zu setzen? Ich habe das Offensichtliche versucht:

<input type="hidden" name="viewName" 
    value="<%=Html.Encode(this.Name)%>" />

aber das funktioniert nicht. Was übersehe ich hier?

Gracias.

4voto

Postlagerkarte Punkte 5738

Wenn Sie auf der Suche nach einer Lösung für asp.net core sind, können Sie diese verwenden:

@System.IO.Path.GetFileNameWithoutExtension(ViewContext.View.Path)

Dies gibt den Namen der aktuellen Ansicht zurück.

0voto

griegs Punkte 22284

Sollten Sie nicht eine Validierungsmethode verwenden, wie sie Nerd Dinner implementiert?

Auf diese Weise brauchen Sie das alles nicht zu tun und können einfach die Ansicht zurückgeben.

0voto

Damon Jones Punkte 49

Ich hatte vor kurzem das gleiche Problem und der Codeschnipsel, den ich mir ausgedacht habe, hat mein Problem gelöst.

Der einzige Nachteil ist, dass Request.UrlReferrer in einigen Fällen null sein könnte. Etwas spät, aber schien für mich zu arbeiten und ich deckte alle Grundlagen der Request.UrlReferrer nicht Null sein.

 if (Request.UrlReferrer != null)
 {
      var viewUrl = Request.UrlReferrer.ToString();
      var actionResultName = viewUrl.Substring(viewUrl.LastIndexOf('/'));
      var viewNameWithoutExtension = actionResultName.TrimStart('/');
 }

0voto

MaxJimenez Punkte 1

Sie können Razor verwenden:

in der Kopfzeile Ihrer Ansicht

@{
    ViewData["Title"] = "YourViewName";    
}

in Ihrer HTML-Ansicht

@{
   var _nameCurrentView = ViewContext.ViewData["Title"];
}

Verwenden Sie in Ihrer HTML die Variable @_nameCurrentView

  <li class="breadcrumb-item active">@_nameCurrentView</li>

oder in Ihrer Aktion verwenden

  ViewData["Title"]

-3voto

Anthony Johnston Punkte 9129

Habe gerade ein Blog-Ding darüber geschrieben

http://www.antix.co.uk/A-Developers-Blog/Targeting-Pages-with-CSS-in-ASP.NET-MVC

  /// <summary>
  /// <para>Get a string from the route data</para>
  /// </summary>
  public static string RouteString(
      this ViewContext context, string template) {

   foreach (var value in context.RouteData.Values) {

    template = template.Replace(string.Format("{{{0}}}",
            value.Key.ToLower()),
            value.Value == null
                ? string.Empty
                : value.Value.ToString().ToLower());
   }

   return template;
  }

Verwendung

<body class="<%= ViewContext.RouteString("{controller}_{action}") %>">

EDIT: Ja, das ist nicht gehen, um Ihnen die Ansicht Name wie der erste Kommentar Staaten, gibt es Ihnen den Controller und Aktion. Aber verlassen es hier als seine wertvoll zu wissen, dass es nicht tut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X