Самый простой способ:
Зайдите в свой конструктор пользовательских интерфейсов,
выберите UITextField
и «Control-Drag» для «Деталь View Controller-Detail» и выпуск.
Откроется окно. Затем в разделе «Розетки» выберите «Делегат».
Вот и все. Это сработало для меня.
Ваша база данных будет базовым классом для ваших контроллеров. Этот базовый класс должен расширять Controller, а все ваши контроллеры должны расширять базовый класс. Вот небольшой пример:
public class BaseController : Controller
{
private AuthServices _auth;
private LogHelper _log;
private Repository _repository;
/// <summary>
/// <see cref="AuthServices"/>
/// </summary>
protected AuthServices Authorization
{
get { return _auth ?? (_auth = new AuthServices()); }
}
/// <summary>
/// <see cref="LogHelper"/>
/// </summary>
protected LogHelper Log
{
get { return _log ?? (_log = new LogHelper()); }
}
/// <summary>
/// <see cref="Repository"/>
/// </summary>
protected Repository Repository
{
get { return _repository ?? (_repository = new Repository()); }
}
}
Обратите внимание на ленивое создание экземпляра. Это позволяет мне прокрасться перед запуском тестов и установить свои личные поля с помощью моков.
Что касается сеанса, ваш объект User все еще может быть сохранен в сеансе, как в традиционном приложении ASP.NET. Практически все еще есть (Response, Cache, Session и т. Д.), Но некоторые из них были обернуты классами из System.Web.Abstractions, чтобы их можно было смоделировать для тестирования. Все они по-прежнему ведут себя одинаково, хотя некоторые из них не следует использовать в их традиционной роли (например, не Response.Redirect, верните ActionResult, например RedirectToRouteResult, который выполняет ваше перенаправление).
Что касается обоснования ваших вопросов…
Не подчеркивайте единственное соединение с базой данных. В зависимости от вашей реализации это может быть даже плохой идеей, поскольку запросы могут наступать друг на друга. Просто откройте свой Connex, используйте его и удалите / закройте его, когда закончите.
Кроме того, одним из самых больших изменений, которые приносит MVC, является отказ от модели с отслеживанием состояния, которую традиционный ASP.NET пытался привнести в веб-разработку. Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.
В зависимости от вашей реализации это может быть даже плохой идеей, поскольку запросы могут наступать друг на друга. Просто откройте свой Connex, используйте его и удалите / закройте его, когда закончите.Кроме того, одним из самых больших изменений, которые приносит MVC, является отказ от модели с отслеживанием состояния, которую традиционный ASP.NET пытался привнести в веб-разработку. Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.
В зависимости от вашей реализации это может быть даже плохой идеей, поскольку запросы могут наступать друг на друга. Просто откройте свой Connex, используйте его и удалите / закройте его, когда закончите.Кроме того, одним из самых больших изменений, которые приносит MVC, является отказ от модели с отслеживанием состояния, которую традиционный ASP.NET пытался привнести в веб-разработку. Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.
Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится. Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.Если вы используете сеансы, я бы рекомендовал иметь класс сеанса, чтобы вам нужно было указать имя строки только один раз в коде, и это также даст вам IntelliSence.
public static class SessionHandler
{
// User Values
private static string _userID = "UserID";
private static string _userRole = "UserRole";
public static string UserID
{
get
{
if (HttpContext.Current.Session[SessionHandler._userID] == null)
{ return string.Empty; }
else
{ return HttpContext.Current.Session[SessionHandler._userID].ToString(); }
}
set
{ HttpContext.Current.Session[SessionHandler._userID] = value; }
}
public static string UserRole
{
get
{
if (HttpContext.Current.Session[SessionHandler._userRole] == null)
{ return string.Empty; }
else
{ return HttpContext.Current.Session[SessionHandler._userRole].ToString(); }
}
set
{ HttpContext.Current.Session[SessionHandler._userRole] = value; }
}
}
Сеансы вообще не изменились в MVC. Класс GlobalApplication в Global.asax тоже существует. Также существуют страницы, которые вы хотели бы ссылаться на репозиторий в контроллере, а не на страницу. Добавление свойства в базовый класс контроллера - нормально; Я делаю это все время.
Вы можете создать связующее звено модели для инкапсуляции состояния.
(См. книгу Стива Сандерсона о реализации корзины в mvc)
С помощью связующего элемента модели вы получаете доступ к controllerContext - который имеет HttpContext.