Статика против публичной собственности

1

Я писал код в MVC, и я не понимаю поведение публичных свойств в моем проекте !! мой код - это очень простое свойство increment. Когда я клик на кнопке, свойство перезаписывается. Его работа только тогда, когда у меня есть свойство STATIC, но когда у меня есть PUBLIC, приращения не работают. государственная собственность скоротечна? Не могли бы вы помочь мне понять это, мой контроллер:

  public class DatsController : Controller
{
    // GET: Dats
    Dats dats;
    static public int _Var
    {
        get; set;
    }
    public DatsController()
    {           
            dats = new Dats();      
    }

    public ActionResult Index()
    {
         if (Request.HttpMethod == "post")
         {
             ViewBag.zmienna = _Var;
             dats.dayToday = DateTime.Now.Date;

         }
         else
         {
            // var = var + 5;
             ViewBag.zmienna = _Var;
         }

        return View();
    }

    public ActionResult Next()
    {
        _Var = _Var + 5;
        //dats.firstDayWeek = data.firstDayWeek.AddDays(7);
        return RedirectToAction("Index", "Dats");
    }
}

ok спасибо для ваших ответов !! Я был прочитан, и я написал еще один код и до сих пор не работает. Я знаю, где проблема, но я не знаю, как их исправить,/если бы вы могли мне помочь, я буду большим!

Моя модель:

 public class Dats
{
     static private DateTime _dataToday;
     static private DateTime _firstDayWeek;
     static private DateTime _lastDayWeek;

     static public DateTime DayToday { get { return _dataToday = DateTime.Now.Date; } }
     static public DateTime FirstDayWeek { get { return _firstDayWeek = Dats.pierwszyDzienTygodnia(_dataToday); } set { _firstDayWeek = value; } }
     static public DateTime LastDayWeek { get { return _lastDayWeek = Dats.ostatniDzienTygodnia(_dataToday); } set { _lastDayWeek = value; } }

    static public DateTime pierwszyDzienTygodnia(DateTime data)
    {

        int dzien = DayOfWeek.Monday - data.DayOfWeek;
        if (dzien > 0)
        {
            dzien -= 7;
        }
        return data.Date.AddDays(dzien);
    }
    static public DateTime ostatniDzienTygodnia(DateTime data)
    {
        DateTime ostatniDzien = pierwszyDzienTygodnia(data.Date);
        return ostatniDzien.Date.AddDays(6);

    }

}

мой контроллер:

public class DatsController : Controller
{

    public ActionResult Index()
    {

         return View();
    }

    public ActionResult Next()
    {
        Dats.FirstDayWeek = Dats.FirstDayWeek.AddDays(7);
        return RedirectToAction("Index", "Dats");
    }
}

мой взгляд:

@using (Html.BeginForm("Next", "Dats", FormMethod.Post))
{
    <button type="submit">Next</button>
    @*@Html.ActionLink("dalej","Next", "Visits",new {data =7})*@

    <dl class="dl-horizontal">
        @Dats.DayToday
        <dd>@Dats.FirstDayWeek</dd>
        <dd>@Dats.LastDayWeek</dd>
    </dl>
}

и я хотел бы указать даты в моей собственности firstDayWeek.

  • 0
    Не, как не использовать статические свойства с контроллерами. Контроллеры не являются поточно-ориентированными, поэтому статическое свойство будет совместно использоваться не только несколькими запросами конкретного пользователя, но и всеми запросами всех пользователей. Другими словами, вы пропускаете данные между разными клиентами.
Теги:
asp.net-mvc

3 ответа

1

Статический классификатор для переменной означает, что переменная определена один раз. Когда у вас нет статического классификатора, переменная будет определяться каждый раз при создании экземпляра вашего класса. Пример:

class A{
  public static int c;
};
class B{
  public int c;
}

A a = new A();
a.c =0;
a.c++;//1
A aa = new A();
aa.c++;//2

B b= new B();
b.c++;//1;
B bb = new B();
bb.c++;//1
1

Вопрос должен быть Static vs Instance. Функциональность является основным различием между ними. Статическое свойство разделяется между всеми объектами класса. Поэтому всякий раз, когда вы делаете новый запрос, создается новый экземпляр класса контроллера. Поскольку свойство является статическим, оно доступно для нового экземпляра контроллера для его получения и установки. Однако в случае переменной экземпляра свойство также является новым и инициализируется при создании нового экземпляра контроллера.

0

Всякий раз, когда вы пишете функцию или объявляете переменную, она не создает экземпляр в памяти до создания объекта класса. Но если вы объявляете какую-либо функцию или переменную со статическим модификатором, она непосредственно создает экземпляр в памяти и действует глобально. Статический модификатор не ссылается ни на какой объект. Таким образом, они похожи на одну копию в памяти, которую разделяют все. Вы должны использовать статические переменные только для жестко заданных значений для вашего приложения. См. Это для получения более подробных сведений. Какая польза от статической переменной в С#? Когда его использовать? Почему я не могу объявить статическую переменную внутри метода?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню