首页 > 编程语言 >无涯教程-ASP.NET MVC - 模型绑定

无涯教程-ASP.NET MVC - 模型绑定

时间:2023-10-12 14:32:15浏览次数:49  
标签:ASP Create 无涯 Html MVC Employee new model class

ASP.NET MVC模型绑定允许您将HTTP请求数据与模型进行映射,使用浏览器在HTTP请求中发送的数据创建.NET对象的过程。

模型绑定是HTTP请求和C#操作方法之间精心设计的桥梁,由于POST和GET会自动传输到您指定的数据模型中,因此开发人员可以轻松使用表单上的数据, ASP.NET MVC使用默认联编程序在后台完成此操作。

让我们看一个示例,在该示例中,我们从上一章开始在项目中添加了"Create View",我们将了解如何将值从"View"获取到EmployeeController操作方法。

以下是POST的Create Action方法。

//POST: Employee/Create
[HttpPost]
public ActionResult Create(FormCollection collection){
   try{
      //TODO: Add insert logic here
      return RedirectToAction("Index");
   }catch{
      return View();
   }
}

右键单击"Create Action"方法,然后选择"Add View"。

Right-click Create Action

它将显示"Add View"对话框。

Display Add View Dialog

如您在上面的屏幕截图中所见,已经提到了默认名称,现在,从"Template"下拉列表中选择"Create",从"Model"类下拉列表中选择"Employee"。

您将在Create.cshtml视图中看到默认代码。

@model MVCSimpleApp.Models.Employee
@{
   Layout = null;
}

<!DOCTYPE html>
<html>
   <head>
      <meta name = "viewport" content = "width=device-width" />
      <title>Create</title>
   </head>
	
   <body>
      @using (Html.BeginForm()){
         @Html.AntiForgeryToken()
         <div class = "form-horizontal">
            <h4>Employee</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
				
            <div class = "form-group">
               @Html.LabelFor(model => model.Name, htmlAttributes:
                  new{ @class = "control-label col-md-2" })
						
               <div class = "col-md-10">
                  @Html.EditorFor(model => model.Name, new{ htmlAttributes =
                     new { @class = "form-control" } })
							
                  @Html.ValidationMessageFor(model => model.Name, "",
                     new{ @class = "text-danger" })
               </div>
            </div>
				
            <div class = "form-group">
               @Html.LabelFor(model => model.JoiningDate, htmlAttributes:
                  new{ @class = "control-label col-md-2" })
						
               <div class = "col-md-10">
                  @Html.EditorFor(model => model.JoiningDate, new{ htmlAttributes =
                     new { @class = "form-control" } })
							
                  @Html.ValidationMessageFor(model => model.JoiningDate, "",
                     new { @class = "text-danger" })
               </div>
            </div>
				
            <div class = "form-group">
               @Html.LabelFor(model => model.Age, htmlAttributes:
                  new { @class = "control-label col-md-2" })
						
               <div class = "col-md-10">
                  @Html.EditorFor(model => model.Age, new { htmlAttributes =
                     new { @class = "form-control" } })
							
                  @Html.ValidationMessageFor(model => model.Age, "", new{ @class = "text-danger" })
               </div>
            </div>
				
            <div class = "form-group">
               <div class = "col-md-offset-2 col-md-10">
                  <input type = "submit" value = "Create" class = "btn btn-default"/>
               </div>
            </div>
				
         </div>
      }
		
      <div>
         @Html.ActionLink("Back to List", "Index")
      </div>
		
   </body>
</html>

当用户在"Create View"上输入值时,它就可以在FormCollection和Request.Form中使用,我们可以使用任何这些值从视图中填充员工信息。

让我们使用以下代码使用FormCollection创建Employee。

//POST: Employee/Create
[HttpPost]
public ActionResult Create(FormCollection collection){
   try {
      Employee emp = new Employee();
      emp.Name = collection["Name"];
      DateTime jDate;
      DateTime.TryParse(collection["DOB"], out jDate);
      emp.JoiningDate = jDate;
      string age = collection["Age"];
      emp.Age = Int32.Parse(age);
      empList.Add(emp);
      return RedirectToAction("Index");
   }catch {
      return View();
   }
}

运行此应用程序,并请求此URL http://localhost:63004/Employee /。您将收到以下输出。

Localhost Employee Output

点击页面顶部的"Create New"链接,它将转到以下视图。

Create New Link

让我们输入要添加的另一位员工的数据。

Another Employee Data

单击创建按钮,您将看到新员工已添加到列表中。

New Employee Added

在上面的示例中,我们从HTML视图中获取所有发布的值,然后将这些值映射到Employee属性。

在这种情况下,只要发布的值与Model属性的格式不同,我们都将进行类型转换。

这也称为手动绑定,这种类型的实现对于简单和小型数据模型可能并不那么糟糕,但是,如果您有庞大的数据模型并且需要大量类型转换,那么我们可以利用ASP.NET MVC模型绑定的强大功能和易用性。

让我们看一下我们为模型绑定所做的相同示例。

我们需要更改Create Method的参数以接受Employee Model对象而不是FormCollection,如下面的代码所示。

//POST: Employee/Create
[HttpPost]
public ActionResult Create(Employee emp){
   try{
      empList.Add(emp);
      return RedirectToAction("Index");
   }catch{
      return View();
   }
}

现在,模型绑定的魔力取决于提供值的HTML变量的ID。

对于我们的Employee模型,HTML输入字段的ID应该与Employee模型的属性名称相同,并且可以看到Visual Studio在创建视图时使用的模型的相同属性名称。

@Html.EditorFor(model => model.Name, new { htmlAttributes=new { @class="form-control" } })

默认情况下,映射将基于属性名称,这是我们发现HTML帮助器方法非常有用的地方,因为这些帮助器方法将生成HTML,该HTML将具有适当的名称以供模型绑定使用。

运行此应用程序,并请求URL http://localhost:63004/Employee/。您将看到以下输出。

Request for URL

让我们单击页面顶部的"Create New"链接,它将转到以下视图。

Click Create New Link

让我们输入要添加的另一位员工的数据。

Enter Data Another Employee

现在单击"Create"按钮,您将看到使用ASP.Net MVC模型绑定将新员工添加到您的列表中。

MVC Model Binding

参考链接

https://www.learnfk.com/asp.net_mvc/asp.net-mvc-model-binding.html

标签:ASP,Create,无涯,Html,MVC,Employee,new,model,class
From: https://blog.51cto.com/u_14033984/7827281

相关文章

  • 无涯教程-ASP.NET MVC - 选择器
    ActionSelector是可以应用于Action方法的属性,用于响应请求而调用哪种Action方法,它有助于路由引擎选择正确的操作方法来处理特定请求。在编写Action方法时,它起着至关重要的作用。这些选择器将根据操作方法来决定方法调用的行为,它通常用于为操作方法的名称加上别名。ActionSele......
  • 无涯教程-ASP.NET MVC - 控制器
    控制器本质上是ASP.NETMVC应用程序的中央单元,控制器决定将选择哪个模型,然后在呈现该视图之后,从模型中获取数据并将其传递给相应的视图。控制器是从System.Web.Mvc.Controller继承的C#类,System.Web.Mvc.Controller是内置的控制器基类,控制器中的每个公共方法都称为操作方法,这意味......
  • Spring MVC 与 Spring Webflux 性能测试,谁更强?
    如果你已经使用Spring一段时间或者是编程初学者,你一定听说过使用响应式编程比传统的线程池风格更好。自Spring诞生以来,开发者创建Java企业应用程序就变得更加容易。它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并且可以根据......
  • 无涯教程-ASP.NET MVC - 简介
    ASP.NETCoreMVC是ASP.NETCore内,提供给Web应用程序开发的框架,它可视为ASP.NETMVC的后继版本,其主要功能均衍生自ASP.NETMVC,但它除了基于ASP.NETCore外,也将ASP.NETMVC与类似平台进行了整合,例如负责View的ASP.NETWebPages以及负责RESTfulAPI的ASP.NETW......
  • 无涯教程-ASP.NET Core - Razor表单
    在本章中,无涯教程将继续讨论标签助手,还将在应用程序中添加新功能,并使其能够编辑现有员工的详细信息,将在每个员工添加一个链接,该链接将转到HomeController上的Edit动作。@modelHomePageViewModel@{ViewBag.Title="Home";}<h1>Welcome!</h1><table>@forea......
  • spring-mvc 请求流程学习
    参考:01、基础入门-SpringBoot2课程介绍_哔哩哔哩_bilibili请求进入HttpServlet的doGet方法然后通过实现类org.springframework.web.servlet.FrameworkServlet#doGet()调用org.springframework.web.servlet.FrameworkServlet#processRequest----》org.springframework.web.ser......
  • 无涯教程-ASP.NET Core - Razor导入
    在本章中,无涯教程将讨论RazorViewImport,除了ViewStart文件之外,还有一个ViewImports文件,MVC框架在呈现任何视图时都将查找该文件。就像ViewStart文件一样,可以将ViewImports.cshtml放到文件夹中,并且ViewImports文件可以影响文件夹层次结构中的所有视图。此视图是此版本MVC的......
  • 无涯教程-ASP.NET Core - Razor视图
    在本章中,无涯教程将讨论RazorViewStart。MVC中的Razor视图引擎有一个约定,即它将查找名称为_ViewStart.cshtml的任何文件,并在该文件中执行代码。ViewStart文件中的代码无法呈现到页面的HTML输出中,但可用于从各个视图内的代码块中删除重复的代码。在示例中,如果希望每个视图......
  • 无涯教程-ASP.NET Core - Razor布局
    在本章中,无涯教程将了解“RazorLayout”视图,大多数网站和Web应用程序都希望创建呈现一些常见元素的页面。布局视图现在了解什么是布局视图。"Layout"视图是扩展名为*.cshtml的Razor视图,您可以选择以所需的方式命名布局视图,在本章中,将使用名为_Layout.cshtml。这是"Layou......
  • 无涯教程-ASP.NET Core - 实体框架
    在本章中,无涯教程将设置和配置应用程序以保存和读取SQLServer数据库中的数据。要使用数据库,将使用实体框架,该框架经过了重新编写以与新的.NETFramework一起使用。在此应用程序中,将使用SQLServerLocalDB。LocalDB是为开发人员优化的SQLServer的特殊版本。VisualStudio......