Я немного новичок в MVC5, и я пытался использовать метод, показанный в следующем ответе, для установки глобальных переменных во всем проекте: Razor MVC, куда поместить глобальные переменные, доступные на главной странице, partiview и представлении?
Моя цель - установить переменные в базовом контроллере, которые могут использоваться страницей макета при изменении представления.
Проблема, с которой я столкнулся, заключается в следующем: я создал базовый контроллер, который наследуется всеми другими контроллерами;
public class BaseController : Controller
{
protected ViewModelBase ModelBase { get; private set; }
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResultBase)//Gets ViewResult and PartialViewResult
{
object viewModel = ((ViewResultBase)filterContext.Result).Model;
if (viewModel != null && viewModel is ViewModelBase)
{
ViewModelBase baseVM = viewModel as ViewModelBase;
ALM_APP objALM_APP = new ALM_APP();
objALM_APP = DalContext.getAppInformation();
baseVM.ApplicationName = objALM_APP.ApplicationName;
baseVM.AppVersion = objALM_APP.Version;
}
}
base.OnActionExecuted(filterContext);//this is important!
}
}
Затем я создал класс ViewModelBase, строго типизированный с помощью _Layout.cshtml.
namespace TestProject.Models
{
public abstract class ViewModelBase
{
public string ApplicationName { get; set; }
public string AppVersion { get; set; }
public string Name { get; set; }
public string Domain { get; set; }
public string UserID { get; set; }
public string Groups { get; set; }
public string LoginTime { get; set; }
public Dictionary<string, string> MenuList { get; set; }
}
}
public class CommonViewModel : ViewModelBase
{
}
В файле _Layout.cshtml я вызываю viewmodelbase следующим образом:
@model TestProject.Models.ViewModelBase
а затем я использовал атрибут модели следующим образом в макете:
@Model.ApplicationName
В этом случае viewModel всегда имеет значение null в BaseController, когда filterContext.Result приводится к ViewResultBase:
object viewModel = ((ViewResultBase)filterContext.Result).Model;
Из-за чего @Model.ApplicationName выдает исключение ссылки Null следующим образом:
"В App_Web_3t5b2o3k.dll произошло исключение типа "System.NullReferenceException", но оно не было обработано в пользовательском коде"
Я также попытался создать новый объект класса CommonViewModel в базовом контроллере и установить в нем атрибуты модели, но безуспешно.
Я был бы признателен, если бы я мог получить некоторую помощь по этому поводу.
[HttpPost] public ActionResult Index(string Username, string Password) { return View("~/Views/Dashboard/Dashboard.cshtml"); }
- person Ali Haider   schedule 07.12.2014return View("~/Views/Dashboard/Dashboard.cshtml", new CommonViewModel());
Теперь мне нужно проверить, является ли объект CommonViewModel постоянным для одного сеанса. Большое спасибо за наводку! оценил. - person Ali Haider   schedule 07.12.2014