ASP.NET Core MVC从Controller传递内容协商数据到View

创建ASP.NET Core MVC应用程序(1)-添加Controller和View 创建ASP.NET Core MVC应用程序(1)-添加Controller和View参考文档:Getting started with ASP.NET Core MVC and Visual Studio 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: 官方文档涉及的内容相当全面,属 阅读详情

Controller请求及相应流程说明

在这里插入图片描述

  • MVC中的Controller是一个类文件,控制器继承自Microsoft.AspNetCore.Mvc.Controller。
  • Controller类名称后缀为Controller,比如HomeController、StudentController。
  • 当来自浏览器的请求到达我们的应用程序时,MVC中的Controller会处理传入的HTTP请求并响应用户操作。
  • Controller类中包含一组公共方法。Controller类中的这些公共方法称为操作方法,通过这些操作方法可以处理传入的HTTP请求。
  • 假设读者在浏览器地址栏中输入了http://localhost:5000/home/details并按Enter键。
  • URL"/home/details"会映射到HomeController中的Details公共操作方法。
  • 映射由应用程序中定义的路由规则完成。
  • 请求到达Controller操作方法。作为处理该请求的一部分,Controller创建Model。
  • Controller通过依赖注入注册的服务来查询模型数据。比如,我们要查询学生的数据,就需要通过HomeController依赖的IStudentRepository服务。
  • IStudentRepository服务使用构造函数注入的方式注册到HomeController。
  • 请注意,我们将注入的依赖项分配给了readonly字段。这是一个很好的做法,因为这可以防止在使用的过程中意外地为其分配另一个值。
  • 当Controller拥有所需地模型数据时,比如我们正在提供的服务或RESTful API,它就可以简单地返回该模型数据。

从Controller中返回JSON数据

​ 以下代码返回JSON数据,请注意,将Details()方法的返回类型设置为JsonResult,因为我们显式返回JSON类型数据。在这种情况下,Details()方法始终返回JSON类型数据。

 public class HomeController:Controller
    {
        private readonly IStudentRepository _studentRepository;

        public HomeController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }
        public JsonResult Details()
        {
            Student model = _studentRepository.GetStudent(1);
            return Json(model);
        }
    }

​ 现在我们运行项目。浏览器从服务端获得了JSON数据,并将其自动转移为Unicode字符集编码的文本。为了方便显示,需要额外安装一个插件(我用的是JSON Formatter,类似插件很多),格式化后的效果如图所示:

在这里插入图片描述

​ 因为我们指定了返回类型是JSON,所以浏览器不需要进行内容协商并忽略Accept Header。

从控制器中返回内容协商内容

​ 内容协商属于HTTP,HTTP提供了内容协商方法,允许客户端和服务端有这样的协定。通过这些方法,单一的URL就可以代表不同的资源(如同一个网站页面的法语版和英语版),这些不同的版本称为变体。

​ 举个例子,如果某个站点有使用法语和使用英语的两种用户,需要用这两种语言提供网站站点信息。理想情况如下,服务端应当向英语用户发送英文版,向法语用户发送法文版——用户只要访问网站主页就能得到相应语言的内容。

​ 修改HomeController中Details()方法的返回类型,代码如下:

 public class HomeController:Controller
    {
        private readonly IStudentRepository _studentRepository;

        public HomeController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }
        public ObjectResult Details()
        {
            Student model = _studentRepository.GetStudent(1);
            return new  ObjectResult(model);
        }
    }

​ 请注意,上面的示例代码遵循内容协商,但是为了让代码能够返回XML格式的数据,我们必须通过调用ConfigureServices()方法中的AddXml SerialzerFormatters()。

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews(a => a.EnableEndpointRouting = false).AddXmlSerializerFormatters();

            services.AddSingleton<IStudentRepository, StudentRepository>();
        }

​ 这样,如果将请求头设置为application/xml,则返回XML数据。如果将请求头设置为application/json,则返回JSON数据。

从Controller返回View

​ 以下实例代码返回View类型。请注意,在返回View时要将Details()方法的返回类型设置为ViewResult。

  public class HomeController:Controller
    {
        private readonly IStudentRepository _studentRepository;

        public HomeController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }
        public ViewResult Details()
        {
            Student model = _studentRepository.GetStudent(1);
            return  View(model);
        }
    }

​ 此时如果运行应用程序并导航到http://localhost:5000/home/details,我们会收到以下错误。这是因为还没有创建所需的View文件。

在这里插入图片描述

MVC中的View

  • 用于显示Controller提供给它的Model的业务数据。
  • 视图是带有嵌入Razor标记的HTML模板。
  • 如果编程语言是C#,则视图文件具有.cshtml扩展名。

比如,在MVC项目中,我们有两个Controller:HomeController和StudentController。

HomeController有以下3个操作方法:

  • Details()。
  • Edit()。
  • Index()。

StudentController有以下3个操作方法:

  • Details()。
  • Edit()。
  • List()。

视图文件结构

​ 我们看一下视图文件夹结构(稍后会有创建步骤),如图所示:

在这里插入图片描述

  • 所有HomeController的视图都位于Views文件夹中的Home文件夹中。
  • 所有StudentController的视图都位于Views文件夹中的Student文件夹中。

视图发现

​ 查看HomeController,其中只有一个操作方法Details()。

  • Details() 方法会调用View() 方法返回一个视图。
  • View() 方法是由基类Controller提供。
public class HomeController:Controller
{
    public ViewResult Details()
    {
        return View();
    }
}

​ Details() 操作方法会返回一个视图,因此默认情况下MVC会查找具有相同名称且扩展名为.cshtml的视图文件。在这种情况下,它会查找Details.cshtml。它按指定的顺序查找此文件。

​ Controller的名称是HomeController,它在/Views/Home/文件夹中,如果在Views/Shared/文件夹中找到了视图文件,则视图会生成HTML响应发出请求的客户端。

​ 如果找不到视图文件,则会报错。

​ 现在可以在项目的根目录创建路径为/Views/Home/Details.cshtml的文件夹和视图文件,步骤如下:

  • 创建Views文件夹和Home文件夹。
  • 右击Home文件夹,选择添加➡新建项。
  • 在弹出的窗口中,选泽Razor视图,修改名称为Details.cshtml。

View重载方法

​ ASP.NET Core MVC中还提供了几个View()重载方法。如果我们在使用下面的View()重载方法,则它将查找与Action()方法同名的视图文件。

  • View()。
  • View(object model)。

比如,我们从HomeController的Details() 方法返回一个View()。默认情况下,MVC在Views/Home文件夹中查找名为Details .cshtml的视图文件。

public class HomeController:Controller
{
    public ViewResult Details()
    {
        return View();
    }
}

自定义视图发现

​ 如果读者不喜欢默认约定,则可以使用View(string viewName)方法的重载版本,该方法将view.Name作为参数,以查找具有读者自定义名称的视图文件。

​ 在以下示例中,MVC查找名为Test.cshtml而不是Details.cshtml的视图文件。如果我们没有指定视图名称,则它会查找Details.cshtml。

public class HomeController:Controller
{
    public ViewResult Details()
    {
        return View("Test");
    }
}

指定视图文件路径

​ 我们可以指定视图名称或视图文件路径。在以下示例中,我们指定了视图文件的绝对路径。因此,在这种情况下,MVC会在MyViews文件夹中查找名为Test.cshtml的视图文件。如果我们没有指定视图文件的路径,则默认情况下,MVC会在Views/Home文件夹中查找Details.cshtml文件。

public class HomeController:Controller
{
    public ViewResult Details()
    {
        return View("MyViews/Test.cshtml");
    }
}

​ 请注意以下几点:

  • 使用绝对路径时,必须加上.cshtml扩展名。
  • 如果使用绝对路径,则MVC会从项目的根目录开始搜索,推荐使用/或~/。

以下三行代码实现的功能是一样的:

return View("MyViews/Test.cshtml");
return View("/MyViews/Test.cshtml");
return View("~/MyViews/Test.cshtml");

相对视图路径

​ 指定视图文件路径时,我们也可以使用相对路径。使用相对路径,我们可以不指定文件扩展名.cshtml。在以下示例中,MVC会在路径为Views/Test的文件夹中查找Update.cshtml文件。

📎 ../表示父级目录,./表示当前目录,/表示根目录。

public class HomeController:Controller
{
     public ViewResult Details()
        {
            return View("../Test/Update");
        }
}

其他View()重载方法

重载方法描述
View(object model)使用此重载方法将模式数据从控制器传递到视图。
View(string viewName,object model)传递视图名称和模型数据

从Controller传递数据到View

数据从Controller传递到View的方法

​ 在ASP.NET Core MVC中,有以下3种方法可以将数据从Controller传递到View。

  • 使用ViewData。
  • 使用ViewBag。
  • 使用强类型模型对象,这也叫做强类型视图。

通过使用ViewData或ViewBag传递数据,我们会创建一个弱类型的视图。

使用ViewData将数据从Controller传递到View

​ 我们希望将HomeController的Details()操作方法种的Student模型数据和视图页面的Title传递给Details.cshtml视图。因此,修改HomeController中的Details()方法,如下所示:

 public ViewResult Details()
        {
            Student model = _studentRepository.GetStudent(1);
            //使用ViewData将PageTitle和Student模型传递给View
            ViewData["PageTitle"] = "Student Details";
            ViewData["Student"] = model;
            return View();
        }

📎在View中访问ViewData

​ 要将HomeController的Details()方法中的ViewData传递到View,需要修改Details.cshtml文件中的代码,如下所示:

<!--Studet类所在的命名空间为WebApplication12.Models,读者根据自己实际情况引用-->
@using WebApplication12.Models
<html>
<head>
    <title>Details</title>
</head>

<body>
    <h3>@ViewData["PageTitle"]</h3>

    @{ var student = ViewData["Student"] as Student;}
    <div>
        姓名:@student.Name
    </div>
    <div>
        邮箱:@student.Email
    </div>
    <div>
        主修科目:@student.Major
    </div>
</body>
</html>

​ 运行项目后的结果如图所示:

在这里插入图片描述

📎弱类型对象DataView说明

  • ViewData时弱类型的字典(dictionary)对象。

  • 我们使用string类型的键值对来存储和查询ViewData字典中的数据。可以从ViewData字典中直接访问数据,而无须将数据转换为string类型。

  • 如果访问的是任何其他类型的数据,则我们需要将其显示的地转换为我们期望的类型。

  • 在本例中,我们声明Student对象可以分别访问Student 对象的Name、Email和Major属性。

  • ViewData在运行时会进行动态解析,不提供编译时类型检查,因此我们不会获得智能提示。由于我们没有智能提示,因此会导致编写代码的速度降低,拼写错误和打错的可能性也变大。

  • 我们只会在项目运行时知道这些错误。

  • 出于这个原因,我们通常不使用View Data。

  • 当使用ViewData时,我们最终会创建一个弱类型的视图。

    实际上,ViewBag是ViewData的包装器。通过ViewData,我们使用string类型的键名来存储和查询数据。而对于ViewBag,我们则使用的是动态属性而不是字符串键。

使用ViewBag将数据从Controller传递到View

​ 同样,修改HomeController中的Details()操作方法,如下所示。请注意,我们在ViewBag中使用的是动态属性而不是字符串键值对。

  public ViewResult Details()
        {
            Student model = _studentRepository.GetStudent(1);
            //将PageTitle和Student模型对象存储在ViewBag
            //我们正在使用动态属性PageTitle和Student
            ViewBag.PageTitle = "学生详情";
            ViewBag.Student = model;
      
            return View();
        }

​ 在View中访问ViewBag,要将ViewBag的数据从HomeController的Details()操作方法传递到View。

修改Details.cshtml视图文件中的代码,图下所示:

<head>
    <title>Details</title>
</head>

<body>
    <h3>@ViewBag.PageTitle</h3>

    <div>
        姓名:@ViewBag.Student.Name
    </div>
    <div>
        邮箱:@ViewBag.Student.Email
    </div>
    <div>
        主修科目:@ViewBag.Student.Major
    </div>
</body>
</html>

​ 请注意,我们使用相同的动态属性PageTitle和Student来访问ViewBag数据。

​ 运行项目,结果如图所示:

在这里插入图片描述

ViewData与ViewBag的对比

  • ViewData与ViewBag两者都可以从控制器传递数据到视图。
  • ViewBag是ViewData的包装器。
  • 它们都是创建弱类型的视图。
  • 在ViewData中使用字符串键来存储和查询ViewData字典中的数据。在ViewBag中使用动态属性来存储和查询数据。
  • ViewData和ViewBag都是在运行时动态解析。
  • ViewData和ViewBag不提供编译时类型检查,因此我们不能得到智能提示。

在ASP.NET Core MVC中创建一个强类型视图

📎强类型视图——Controller代码

​ 将数据从控制器传递到视图的首选方法是使用强类型视图。要创建强类型视图,请在控制器中将模型对象传递给View()方法。请注意,在下面的示例中,我们将Student模型对象传递给View()方法。

  public ViewResult Details()
        {
            Student model = _studentRepository.GetStudent(1);
            ViewBag.PageTitle = "学生详情";

            return View(model);
        }

📎强类型视图——View代码

​ 要创建强类型视图,请使用@model指令在视图中指定模型类型。

​ 在下面的示例代码中,我们告诉视图它将使用命名空间WebApplication12.Models中的对象。使用@model指令将Student对象作为模型。

​ 请注意,在指令(@model)中,m是小写的。而要访问模型对象属性时,我们使用@Model。在@Model中,M是大写的。

​ 在下面的示例代码中,访问Student对象属性,如我们正在使用的姓名、邮箱和主修科目,对应@Model.Name、@Model.Email和@Model.Major。

@model WebApplication12.Models.Student
<html>
    <head>
            <title>Details</title>
    </head>
    <body>
        <h3>@ViewBag.PageTitle</h3>
        <div>
            姓名:@Model.Name
        </div>
        <div>
            邮箱:@Model.Email
        </div>
        <div>
            主修科目:@Model.Major
        </div>
    </body>
</html>

📎强类型视图优点

​ 强类型视图与ViewData、ViewBag不同,强类型视图提供编译时类型检查与智能提示。通过智能提示,我们可以提高工作效率,错误拼写的概率几乎为零。如果我们确实犯了错,则将在编译时看到错误信息,而不是在运行时才看到它们。

​ 因此,我们建议使用强类型视图将数据从控制器传递到视图。

总结

​ 📃MVC的流程回顾。

  • 当来自浏览器的请求到达我们的应用程序时,MVC中的控制器会处理传入的HTTP请求并响应用户操作。
  • 控制器构建Model。
  • 如果我们正在构建API,则将模型数据返回给调用方(比如:返回JSON数据)。
  • 或选择View并将Model数据传递到View,然后视图生成所需的HTML来显示数据。

📃视图文件的特点如下:

  • 视图文件具有.cshtml的扩展名。
  • 视图文件是带有嵌入Razor标记的HTML模板。
  • 可能包含Controller提供给它的Model业务数据。

📃视图发现的特点如下:

  • View()或View(object model):查找与操作方法同名的视图文件。
  • 关于View(string viewName)方法的内容,需要注意以下几点:
    • 可查询自定义名称的视图文件。
    • 读者可以指定视图名称或者试图路径。
    • 视图文件路径可以是绝对路径,也可以是相对路径。
    • 绝对路径必须指定.cshtml扩展名。
    • 使用相对路径时,不用带扩展名.cshtml。
  • 将数据从控制器传递到View的3种方法如下:
    • 使用ViewData
      • ViewData是弱类型的字典对象。
      • 使用string类型的键值,存储和查询ViewData字典中的数据。
    • 使用ViewBag
      • ViewBag是ViewData的包装器。
      • 它们都创建了一个弱类型的视图。
      • ViewData使用字符串键来存储和查询数据。
      • ViewBag使用动态属性来存储和查询数据。
      • 它们均是在运行时解析。均不提供编译时类型检查,没有智能提示。
    • 强类型视图
      • 首选方法是使用强类型视图,将数据Controller传递到View。
      • 请在View中使用@model指令指定Model类型。
      • 使用@Model访问模型对象属性。
      • 强类型视图提供编译时类型检查和智能提示。
ASP.NET Core MVC 控制器返回数据详解:视图、JSON、重定向等 ASP.NET Core MVC 提供了丰富的控制器返回类型,包括视图、JSON、重定向、文件等。了解何时使用哪种返回类型对于构建一个高效、可维护的 Web 应用至关重要。通过合理使用这些返回类型,我们可以更好地控制数据流和用户体验。无论是传统的MVC Web 应用,还是现代的Web API,这些基本的控制器返回类型都能满足绝大多数的需求。掌握这些方法,能够帮助开发者快速应对各种业务需求和场景。 阅读详情

相关推荐

asp.net Core Post Json方式给控制器Action传参并拦截丢失参数等错误信息

原生asp.net不支持通过json提交 方式给控制器的Action传参数,本程序通过给自定义输入字符串格式方法。在action的传参上加入FromJsonKey属性即可在传入的json中传入参数,如果传入的json中不存在相应键即报错 [HttpPost] public IActionResult Index([FromJsonKey]int page) { return Json(page); } [HttpPost()] public IActionResult AddUser([FromJsonKey]int id,[FromJsonKey]User user) { return Json(new {id, user }); }

ASP.NET Core - 依赖注入(二)

2,NET Core 依赖注入的基本用法话接上篇,这一章介绍 .NET Core 框架自带的轻量级 Ioc 容器下服务使用的一些知识点,大家可以先看看上一篇文章 [ASP.NET Core - 依赖注入(一)]

风清扬的专栏 1104

LaTeX参考文献格式apsrev4-1,增加文献标题

APS的LaTeX参考文献格式apsrev4-1是隐藏标题的,如果想要出现标题,需要更改apsrev4-1.bst文件内容 在apsrev4-1.bst文件靠后部分,定义不同类型文献格式的地方,将article类型的内容替换为, FUNCTION {article} { output.bibitem format.authors booktitle empty$ { "author" output.check }{ output } if$ author format.

loading1234567的博客 5031

从零开始学习ASP.NET CORE(十三)数据传输给视图

数据传输给视图

father6的博客 313

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

基于LabVIEW控制仪器检测与监控 --普源示波器DS1102Z-E

LabVIEW 控制普源示波器 代码实现与解释

s0101100的博客 4229

【MVC架构】——如何利用Json在View和Controller之间传递数据

    在MVC架构中,虽然很多东西和三层很相似,但是也有很大的区别。就比如传递数据,在三层架构中,传递数据就只要一层返回,另外一层用相同类型的变量来接收就行了。在MVC中,其实原理是一样的,Controller中的方法返回Json字符串,然后View来接收,或者反过来,不同的就是这之间需要一个序列化和反序列化的过程。       本文就简单介绍利用Json在View和Controller之间...

Coder Yasmine 6052

RK3568驱动XS9922B:AHD/CVBS双模摄像头兼容性实战

在嵌入式视频开发中,摄像头驱动的稳定性与兼容性往往决定项目交付质量。Linux内核的V4L2框架提供了统一的视频采集抽象,从v4l2_subdev子设备到media controller链路,再到用户态视频节点,每一层都需要精确配置。对于RK3568这类边缘计算平台,其MIPI CSI接口和自研ISP配合RKCIF,构成了完整的多路视频接入通路。当需要接入模拟视频解码芯片时,驱动设计就需同时考虑AHD高清协议与CVBS标清信号的模式切换、格式协商以及寄存器配置。XS9922B作为支持双模输入的解码芯片,可与

weixin_34216614的博客 346

dotnet core 3 mvc中 Controller 和 apicontroller

if (你的架构是core mvc && 你是用了apicontroller) { //那么 在 GET请求的 action 参数(是个实体)前加上[FromQuery] }

ddsthinkyou123的专栏 384

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

薅“刷宝”羊毛的autojs脚本教程,简单粗暴好用!!!

本教程旨在帮助大家实现用手机或闲置手机来进行“刷宝”平台的收益,能薅多少米就看你的本事了,作者教你的是如何用autojs来进行脚本的挂机教程,掌握了这个思路后,你可以根据自己的实际需要来改进脚本或者撸别的平台:) 适用系统,**android4.0以上,苹果机暂不适用**(大多数android系统手机都是7.0以上,要查看自己手机是android几,见文件夹“视频教程-基础”>1.查看android版本的方法)

rousseaou8的博客 8万+

ASP.NET Core MVC(三)Controller

一、从Controller中返回json数据 我们修改一下Index方法中的返回值 public IActionResult Index(int id,string name) { var stu = new Student { Name = name, ID = id }; return Json(stu); } 二、从Controller中返回内容协商内容 public IActionR

目标:MVP 611

第六天 界面操作及美化(6.4 使用GUI 套件)

本文介绍如何使用VIPM工具安装DMC GUI套件:首先打开VIPM并连接网络,搜索"UI"找到DMCGUI套件后下载安装;安装完成后即可在VIPM中添加控件并预览效果。该方法同样适用于下载其他UI套件,用户可根据需求设计个性化界面。整个流程包括搜索、下载、安装和使用四个简单步骤,适合快速搭建GUI界面。

weixin_38637405的博客 407

ASP.NET Core MVC 控制器(Controller)方法应用实战教程

MVC(Model-View-Controller,模型-视图-控制器)是一种广泛应用于软件开发的架构模式,其核心思想是将应用程序分为三个主要部分,以实现代码的高内聚、低耦合。模型(Model):负责处理应用程序的业务逻辑和数据访问。它封装了应用程序的数据和业务规则,与数据库进行交互,为视图提供数据支持。例如,在一个电子商务应用中,模型可能包括商品类、订单类等,用于管理商品信息和订单处理逻辑。视图(View):负责展示数据给用户。它通常是一个用户界面,如网页或移动应用界面。

caifox的博客 1849

使用epiDisplay包中的logistic

其中的logistic.display函数可以用于获取逻辑回归模型的汇总统计信息,包括自变量的优势比和置信区间,以及回归系数的Wald检验的p值。最后,我们使用print函数打印出汇总统计信息。使用epiDisplay包中的logistic.display函数获取逻辑回归模型的汇总统计信息(包括自变量的初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)- R语言。通过使用logistic.display函数,我们可以方便地获取逻辑回归模型的重要统计信息,并对自变量的影响进行解释和推断。

CyberJolt的博客 606

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【ASP.NET进阶】Controller 层基础:从 MVC 5 到 Core,继承的奥秘与避坑指南

本文对比了ASP.NET MVC 5中的Controller与ASP.NET Core中的ControllerBase的核心差异。MVC 5的Controller是一个"全能型服务员",内置视图渲染、模型验证等完整功能,适合传统Web应用开发;而Core的ControllerBase则是一个"精简型专员",专注于API请求处理,需要配合[ApiController]特性使用。文章通过代码示例展示了二者在类定义、功能特性上的不同,并指出Core中Controller是C

William_cl的博客 1267

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ASP.NET Core MVC(四)Controller、View与Model之间的交互

一、创建Model 我们先创建一个Model: public class Student { public int ID { get; set; } public string Name { get; set; } public GenderTypeE Gender { get; set; } public DateTime Birthday { get; set; } } public enum GenderTy

目标:MVP 2031

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ASP.NET Core ViewData:弱类型数据交互的精髓与避坑指南

本文详细讲解了ASP.NET Core中ViewData的使用方法及其注意事项。文章通过"小区快递柜"的生活类比,形象说明了ViewData作为弱类型字典的特性。通过商城首页案例,演示了在Controller中设置不同类型数据(字符串、数字、自定义对象、集合)到ViewData,以及在View中安全读取这些数据的完整流程(包括判空处理和类型转换)。最后总结了ViewData常见的6个使用陷阱,如类型转换失败、键名大小写问题等,并给出了相应的解决方案。ViewData适合在Controll

William_cl的博客 1355

Asp.Net Core 入门(四)—— Model、View、Controller

  和我们学习Asp.Net MVC一样,Asp.Net Core MVC的Model、View、Controller也和我们熟悉的Asp.Net MVC中的相似。不同的是我们在使用Asp.Net Core MVC的时候需要注入MVC。   Asp.Net Core MVC注入 MVC 的方法有两种,一种是AddMvcCore(),它只是注入了MVC的一些核心的东西,不包括像返回的ViewRes...

weixin_30572613的博客 644

ASP.NET Core完善MVC框架

为什么需要在ASP.NET Core MVC中使用ViewModel ​ 在某些情况下,Model对象可能无法包含View所需的所有数据。这个时候就需要使用ViewModel了,它会包含所需的所有数据,请参考以下Details()方法。注意,需要将学生的详细信息和PageTitle传递给View。 public class HomeController:Controller { private readonly IStudentRepository _studentRepositor

断点_C的博客 1682

C# 技术使用笔记:Asp.Net Core MVC 中控制器 Controllers 中返回数据使用详解

在ASP.NET Core MVC框架中,控制器作为应用程序的核心组件之一,承担着处理用户请求并返回相应数据的重要职责。控制器返回数据的方式多种多样,不同的返回类型适用于不同的场景,合理选择和使用这些返回方式对于构建高效、灵活且易于维护的Web应用程序至关重要。在 ASP.NET Core MVC 中,类用于返回 HTTP 状态码,这在处理特定的请求场景时非常有用。自定义状态码可以更精确地向客户端传达请求的处理结果。例如,当需要返回一个特定的自定义状态码时,可以使用StatusCode方法。

caifox的博客 2065

C# ASP.NET Controller 核心:ViewResult 实战指南(return View (model) 全解析)

本文从实战、避坑和生活类比三个维度深入解析ASP.NET MVC/CORE中的ViewResult返回类型。ViewResult作为"数据+视图"的协作体,通过Action方法获取数据并传递给视图渲染HTML页面。文章详细演示了基础用法(无Model传递)、核心用法(传递Model)以及进阶用法(自定义视图和匿名对象),并针对常见坑点如空Model引用、视图查找失败等问题提供解决方案。通过餐厅点餐的生动类比,帮助开发者快速理解ViewResult的工作机制,掌握这一MVC开发中的关键组件

William_cl的博客 2009

关于MVC与三层架构、个人总结网上杂七杂八得出的最终成果、asp.net (core) MVC、JavaWeb的MVC

关于MVC与三层架构、个人总结网上杂七杂八得出的最终成果 不同的语言的MVC具体实现是不同的

这是一个机械转编程的博客 1307

Asp.Net Core WebAPI实战3

1.MVC模式简介 Model主要跟数据有关,数据CURD、数据的存储简单处理,DAO与DTO,Repository及缓存都可以划归Model层。 View主管视图,用于生成模板根据数据渲染并进行显示 Controller主要涉及到接受用户输入信息,调用Model层进行处理,传递给View渲染返回。 2.MVC在Asp.net Core中的变化 控制器、行为方法、路由、依赖注入...

『程序员·小李』的博客 1785

ASP.NET Core MVC中的viewmodel

简述: ViewModel是ASP.NET Core MVC应用中的隐式声明的层,用来维护Model和View之间的数据传递,是View的数据容器。Model向视图传递数据最可靠的方法是在视图中指定模型类型。此模型通常称为 viewmodel。将 viewmodel 类型的实例传递给视图。使用 viewmodel 将数据传递给视图可让视图充分利用强类型检查。强类型化(或强类型)意味着每个变量和常量都有明确定义的类型(例如string、int或DateTime)。在编译时检查视图中使用的类...

qq_18932003的博客 1019

ASP.NET Core 对Controller进行单元测试

单元测试对我们的代码质量非常重要。很多同学都会对业务逻辑或者工具方法写测试用例,但是往往忽略了对Controller层写单元测试。我所在的公司没见过一个对Controller写过测试的。今...

dotNET跨平台 1126
上一篇: Git-查看提交历史
下一篇: Git-撤销操作
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值