如何获取视图外的视图模型

时间:2016-08-21 00:34:44

标签: asp.net-mvc

在asp.net mvc视图中,您可以访问随视图返回的模型。

如果你不在视图本身,而是在控制器方法完成后运行的另一个方法,那么有什么[静态?]方法来获取当前视图的当前模型?

我可以访问所有标准对象:会话,请求,响应等。

我通过加载Session变量来解决这个问题,但是如果框架已经拥有会话变量,我就不喜欢使用会话。

1 个答案:

答案 0 :(得分:0)

您可以创建将在MVC请求管道中执行的操作过滤器。如果要在执行操作方法后执行某些代码,可以覆盖@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SIGN_IN_REQUEST) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); //Information of account is loaded here final GoogleSignInAccount account = result.getSignInAccount(); int accountId = account.getId(); Plus.PeopleApi.load(googleApiClient, accountId).setResultCallback(new ResultCallback<People.LoadPeopleResult>() { @Override public void onResult(@NonNull People.LoadPeopleResult loadPeopleResult) { Person p = loadPeopleResult.getPersonBuffer().get(0); displayPerson(account, p); } }); } } public void displayPerson(GoogleSignInAccount account, Person p) { DataContainer.getDataContainerInstance().setGoogleSignInAccount(account); DataContainer.getDataContainerInstance().setGooglePerson(p); if (account != null ) { getFragmentManager() .beginTransaction() .replace(R.id.LoginActivityContentArea, new GoogleSignUpFragment(), "GoogleSignUpFragment") .addToBackStack("GoogleSignUpFragment") .commit(); } } 方法。

OnActionExecuted

如果您想要所有请求,可以将此过滤器注册到public class MyCustom : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { var viewModel = filterContext.Controller.ViewData.Model; var response = filterContext.HttpContext.Response; var viewBag = filterContext.Controller.ViewBag; // Use any of these as needed base.OnActionExecuted(filterContext); } } 方法中的GlobalFilters集合。

RegisterRoutes