পুরো এমভিসি সাইট জুড়ে গ্লোবাল ধ্রুবক মান


11

আমার এমভিসি (। নেট) সাইটের বাইরে কিছু ধ্রুবক মান রয়েছে যেমন ফোন নম্বর, শারীরিক ঠিকানা, ইমেল ঠিকানা ইত্যাদি has

আমি এই মানটি একবারে সঞ্চয় করতে চাই, তাই ভবিষ্যতের আপডেটগুলি যখন তাদের বিশদ পরিবর্তন করে for

আমার প্রশ্নটি আরও সহজ করার জন্য, আমি কেবল ফোন নম্বরটিতে ফোকাস করেছি।

আমার প্রশ্নটি কোথায় এবং কীভাবে এই নম্বরটি সংরক্ষণ করবেন এবং আমার সিদ্ধান্ত নিয়ে আমি যে সমস্যার মুখোমুখি হচ্ছি। এই মুহুর্তে, আমি এটি একটি স্থিতিশীল পদ্ধতি হিসাবে গ্লোবাল.এক্সএক্স ফাইলটিতে সঞ্চয় করা বেছে নিয়েছি, যেমন

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

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

এটি খুব ভালভাবে কাজ করে, আমার নিয়ামকটিতে আমি এই পদ্ধতির উল্লেখগুলি যুক্ত করতে এবং এটি একটি ভিউব্যাগে বরাদ্দ করতে পারি

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

অনেকগুলি সাইট অনুসারে, ফোন নম্বরটি প্রতিটি পৃষ্ঠার শীর্ষে দৃশ্যমান হবে এবং এর মতো এটিতে যুক্ত _Layout.cshtmlকরা যৌক্তিক।

আমার যে সমস্যাটি রয়েছে তা হল _ লেআউটসি.এস.টি.এম.এল. এর জন্য কোনও নিয়ামক নেই (আমি জানি না) এবং মানটি পাস করার একমাত্র উপায় হ'ল ভিউব্যাগ.ফোন প্রতিটি দৃশ্যের জন্য সেট আপ করা হয়, ইজি

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();
    }

এটি অগোছালো এবং দুর্গন্ধযুক্ত তবে আমি কীভাবে এটি উন্নতি করতে পারি তার কোনও ধারণা নেই।

আমার গ্লোবাল ভেরিয়েবলগুলি অন্য কোনও জায়গায় সংরক্ষণ করা উচিত বা এর জন্য আরও ভাল পন্থা থাকা উচিত কারণ আমি নিশ্চিত যে এটি একটি সাধারণ সমস্যা।

উত্তর:


12

ওয়েবকনফিগে মান সংরক্ষণ করুন:

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

তারপরে আপনার কোডে, আপনি এটির সাথে উল্লেখ করতে পারেন:

ConfigurationSettings.AppSettings["CompanyTelNo"];

তবে, যেহেতু এটি প্রকৃতপক্ষে অবচিত হয়েছে, তাই এটি ব্যবহার করা ভাল:

ConfigurationManager.AppSettings["CompanyTelNo"]

আমি কীভাবে _ লেআউট পৃষ্ঠা থেকে এই মানটি অ্যাক্সেস করব?
ডেভ

@ রিচার্ড-ডাল্টন উপরে যা বলেছিলেন তার অনুরূপ। ক্লাসে আসল মান না থাকলে। যদি এই মানগুলি পরিবর্তন হয় তবে আপনার পুনরায় সংকলন করতে হবে। যদি সেগুলি কনফিগারেশনে থাকে তবে আপনি কেবল তাদের আইআইএস-এ পরিবর্তন করুন।
জেমস

1
আমি মনে করি কনফিগারেশনসেটিংগুলি অপ্রচলিত, আমি ConfigurationManager.AppSettings["MyKey"]ঠিক একই পদ্ধতিতে ব্যবহার করেছি ।
ডেভ

1
দ্রষ্টব্য: আমাকে ব্যবহার করতে হয়েছিল@System.Configuration.ConfigurationManager.AppSettings["myKey"]
user1477388

1
@ ডেভরুক হিসাবে একই Using System.Configuration;, আপনার ফাইলের শীর্ষে আপনার কাছে কোনও ঘোষণা নেই
জেমস

6

আপনি আপনার _Layout.cshtml ফাইলে সরাসরি বিশ্বব্যাপী ধ্রুবক অ্যাক্সেস করতে পারেন:

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

যাইহোক, আমি এই ধ্রুবকগুলিকে একটি পৃথক ফাইলে স্থানান্তরিত করব (আমার সাধারণত একটি কনস্ট্যান্টস সি স্ট্যাটিক শ্রেণি থাকে) যাতে গ্লোবাল.অ্যাস্যাক্স ফাইলটিতে বিশৃঙ্খলা যুক্ত না হয়।

এছাড়াও, আমি তাদের সম্পত্তি হিসাবে রাখব:

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

পরিবর্তে পদ্ধতিগুলি যাতে তাদের কোথাও এরকম অ্যাক্সেস করা যায়:

Constants.PhoneNumber

যদি তারা প্রায়শই পরিবর্তিত হতে পারে তবে এই মানগুলি কোনও কনফিগার ফাইল বা ডাটাবেসে সংরক্ষণ করা ভাল তবে যাতে পরিবর্তন করার প্রয়োজন হলে এটি পুনর্নির্মাণ এবং স্থাপনার প্রয়োজন হয় না।


2
তিনি একটি সহজ .resx- ফাইল :) ব্যবহার করতে পারেন :)
Knerd

@ এমভিসি অ্যাপ্লিকেশনটি ফাইলগুলি দেখার জন্য স্বীকৃত নয় ...
থার্ডার

1

Global.asax.cs এ .c

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

_লয়আউট.একএসটিএমএলে

<div>Phone number: @MvcApplication.PhoneNumber</div>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.