当前位置: 首页 > 编程笔记 >

asp.net-mvc 基于会话的通用模型绑定

卫烨
2023-03-14
本文向大家介绍asp.net-mvc 基于会话的通用模型绑定,包括了asp.net-mvc 基于会话的通用模型绑定的使用技巧和注意事项,需要的朋友参考一下

示例

有时,我们需要保留整个模型,并在动作甚至控制器之间进行转移。在会话中存储模型是针对此类需求的良好解决方案。如果将其与MVC强大的模型绑定功能结合在一起,我们将获得优雅的方法。我们可以通过三个简单的步骤创建基于通用会话的模型绑定:

第一步:创建模型活页夹

自己创建一个模型绑定器。我个人在/ Infrastructure / ModelBinders文件夹中创建了SessionDataModelBinder类。

using System;
using System.Web.Mvc;

public class SessionDataModelBinder<TModel>
    : IModelBinder
    where TModel : class
{
    private string SessionKey { get; set; }

    public SessionDataModelBinder(string sessionKey)
    {
        if (string.IsNullOrEmpty(sessionKey))
            throw new ArgumentNullException(nameof(sessionKey));
        SessionKey = sessionKey;
    }

    public object BindModel(
        ControllerContext controllerContext, 
        ModelBindingContext bindingContext)
    {
        // 从会话中获取模型
        TModel model = controllerContext
            .HttpContext
            .Session[SessionKey] as TModel;
        // 如果在会话中找不到模型,请创建并存储模型
        if (model == null)
        {
            model = Activator.CreateInstance<TModel>();
            controllerContext.HttpContext.Session[SessionKey] = model;
        }
        // 退货模型
        return model;
    }
}

第二步:注册活页夹

如果我们有如下模型:

public class ReportInfo
{
    public int ReportId { get; set; }
    public ReportTypes TypeId { get; set; }
}

public enum ReportTypes
{
    NotSpecified,
    Monthly, Yearly
}

我们可以在Application_Start方法的Global.asax中为此模型注册基于会话的模型绑定器:

protected void Application_Start()
{
    .........

    // 模型粘合剂。
    // 记住要选择唯一的SessionKey
    ModelBinders.Binders.Add(typeof(ReportInfo), 
        new SessionDataModelBinder<ReportInfo>("ReportInfo"));
}

第三步:使用它!

现在,只需将参数添加到操作中,我们就可以从此模型绑定程序中受益:

public class HomeController : Controller
{
    public ActionResult Index(ReportInfo reportInfo)
    {
        // 只需设置属性
       reportInfo.TypeId= ReportTypes.Monthly;

        return View();
    }

    public ActionResult About(ReportInfo reportInfo)
    {
        //reportInfo.TypeIdis现在每月,因为我们设置了
        // 它以前在索引操作中。
        ReportTypes currentReportType = reportInfo.TypeId;

        return View();
    }
}
           

 类似资料:
  • 问题内容: 我们有一个内部ASP.NET MVC应用程序,需要登录。登录效果很好,并且可以完成预期的工作。会话的有效期为15分钟。在该页面上坐了一段时间后,用户丢失了会话。如果他们尝试刷新当前页面或浏览到另一个页面,他们将获得登录页面。我们会将他们的请求存储起来,以便他们登录后可以继续进入他们请求的页面。这很好。 但是,我的问题是,在某些页面上有AJAX调用。例如,他们可以填写表格的一部分,徘徊并

  • 本文向大家介绍asp.net-mvc Ajax绑定,包括了asp.net-mvc Ajax绑定的使用技巧和注意事项,需要的朋友参考一下 示例 这些是使用POST方法在HTTP请求中输入的表单值。(包括jQuery POST请求)。 假设您做了类似的ajax帖子 此处,json和id中的两个值将绑定到匹配操作,例如            

  • 问题内容: 在我们的MVC 5项目中,我们使用Angular。以下剃刀效果很好: 但是,如果在呈现页面时将MVC Model.FirstName 设置为“ Bob”,则“输入”字段仍为空白。 如果我在Angular控制器中设置此设置: 然后出现“鲍勃”。 我的问题是:是否必须为UI中的每个字段设置 $ scope.VARIABLE = MODEL.VARIABLE ,或者我可以告诉Angular尊

  • 本文向大家介绍ASP.NET MVC基础,包括了ASP.NET MVC基础的使用技巧和注意事项,需要的朋友参考一下 一、MVC与ASP.NET MVC基础概念 MVC是Model-View-Controller的缩写. MVC将应用程序划分为3大组件:模型\视图\控制器. MVC不是ASP.NET所特有,它只是一种开发理念.java中的struts2也是一种MVC模型. ASP.NET MVC从2

  • 本文向大家介绍asp.net-mvc 路由值绑定,包括了asp.net-mvc 路由值绑定的使用技巧和注意事项,需要的朋友参考一下 示例 给定一些默认路由,例如{controller=Home}/{action=Index}/{id?}您是否拥有urlhttps://stackoverflow.com/questions/1558902 这将转到QuestionsController并将值1558

  • 问题内容: 通过AJAX进行MVC模型绑定时遇到一些麻烦。 谁能告诉我为什么CreateTransfereeDetails属性没有绑定,它总是返回为“ null”。 模型: HTML: JavaScript: 谢谢! 问题答案: 用于表单内的输入字段。自动分配给模型的属性。 并使用jquery的serialize()函数使用ajax传递数据