it-swarm.com.de

Globale konstante Werte im gesamten MVC-Standort

Mein MVC (.NET) hat auf der gesamten Website einige konstante Werte, wie z. B. Telefonnummer, physische Adresse, E-Mail-Adresse usw.

Ich möchte diesen Wert einmal speichern, damit zukünftige Updates einfacher sind, wenn sie ihre Details ändern.

Um meine Frage zu vereinfachen, habe ich mich nur auf die Telefonnummer konzentriert.

Meine Frage ist, wo und wie diese Nummer gespeichert werden soll und ein Problem, mit dem ich bei meiner Entscheidung konfrontiert bin. Im Moment habe ich beschlossen, es als statische Methode in der Datei Global.asax zu speichern, z

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
       //logic
    }

    public static string GetPhoneNumber()
    {
        return "012345 678 910";
    }
}

Dies funktioniert sehr gut. In meinem Controller kann ich Verweise auf diese Methode hinzufügen und sie einem ViewBag zuweisen

  public ActionResult Contact()
  {
        ViewBag.Phone = MvcApplication.GetPhoneNumber();
  }

Wie auf vielen Websites wird die Telefonnummer oben auf jeder Seite angezeigt und als solche in das _Layout.cshtml ist logisch.

Das Problem, das ich habe, ist, dass es für die Datei _Layout.cshtml keinen Controller gibt (den ich nicht kenne). Die einzige Möglichkeit, den Wert zu übergeben, besteht darin, für jede Ansicht ein ViewBag.Phone einzurichten, z

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        ViewBag.Phone = MvcApplication.GetPhoneNumber();
        return View();
    }

    public ActionResult About()
    {
        ViewBag.Phone = MvcApplication.GetPhoneNumber();
        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Phone = MvcApplication.GetPhoneNumber();
        return View();
    }

Das ist chaotisch und stinkt, aber ich habe keine Ahnung, wie ich das verbessern kann.

Sollte ich meine globalen Variablen an einem anderen Ort speichern oder gibt es dafür einen besseren Ansatz, da ich sicher bin, dass dies ein häufiges Problem ist.

11
Dave

Speichern Sie die Werte in web.config:

<appSettings>
  <add key="CompanyTelNo" value="012345 678 910" />
</appSettings>

Dann können Sie in Ihrem Code darauf verweisen mit:

ConfigurationSettings.AppSettings["CompanyTelNo"];

Da dies jedoch tatsächlich veraltet ist, ist es besser, Folgendes zu verwenden:

ConfigurationManager.AppSettings["CompanyTelNo"]
12
James

Sie können direkt in Ihrer Datei _Layout.cshtml auf globale Konstanten zugreifen:

<div class="phone">@MvcApplication.GetPhoneNumber()</div>

Ich würde diese Konstanten jedoch in eine separate Datei verschieben (ich habe im Allgemeinen eine statische Klasse Constants.cs), um der Datei global.asax keine Unordnung hinzuzufügen.

Außerdem hätte ich sie als Eigenschaften:

public static string PhoneNumber
{
    get { return "012345 678 910"; }
}

anstatt auf Methoden, damit überall darauf zugegriffen werden kann:

Constants.PhoneNumber

Wenn sie sich wahrscheinlich häufig ändern, ist es besser, diese Werte in einer Konfigurationsdatei oder Datenbank zu speichern, damit sie nicht neu kompiliert und bereitgestellt werden müssen, wenn sie geändert werden müssen.

6
Richard Dalton

In Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
{
  ...
  public const string PhoneNumber = "01234 567890";
  ...
}

In _Layout.cshtml

<div>Phone number: @MvcApplication.PhoneNumber</div>
1
Scott Rickman