jQuery与ASP.NET MVC模型绑定的结合使用

在本文中,将探讨如何将jQuery与ASP.NET MVC模型绑定技术结合使用,以提高Web应用程序的开发效率和用户体验。模型绑定是ASP.NET MVC框架中的一个核心功能,它允许开发者将HTTP请求中的表单值和查询字符串参数自动转换为.NET对象。通过引入jQuery,可以进一步简化这一过程,并添加一些交互性强的UI元素,如日期选择器等。

模型绑定基础

模型绑定发生在MVC框架处理请求的过程中,位于路由和控制器创建之后。一旦控制器从工厂中创建出来,反射机制就会介入,将路由引擎接收到的请求(由客户端操作触发)与HTTP请求中的任何参数匹配起来。换句话说,表单值和查询字符串参数会自动转换为.NET对象,这是MVC框架的一个非常酷的功能。

为了简单说明模型绑定的工作原理,将设置一个快速演示。启动IDE并创建一个ASP.NET MVC 2 Web应用程序。删除Index文件(将稍后创建自己的Index)。以下是将遵循的步骤:

  • 创建一个新的模型叫做Person(并构建项目)
  • 更新控制器以设置一个“空”的Person用于视图
  • 创建一个强类型视图来创建一个Person
  • 在HomeController上创建一个动作方法来捕获‘创建’操作
  • 让MVC框架做剩下的工作

实际上不会在这里持久化任何东西,这只是演示。

简单部分

导航到Models文件夹,右键点击添加——>类名为Person。按照以下方式完成类的定义:

public class Person { public string Name { get; set; } public DateTime BirthDate { get; set; } }

需要在这里构建项目(SHIFT + CTRL + b),以便IDE能够在后续步骤中看到类。反射的类型感知要求类型存在于一个程序集中。

转到Controllers——>HomeController并删除ViewData赋值。将在这里创建一个新的Person并将其与视图一起返回。动作看起来非常简单:

public ActionResult Index() { return View(new Person()); }

右键点击方法中的任何地方,从上下文菜单中选择“添加视图…”。正在添加一个名为Index的视图,将其设置为强类型视图,并将视图内容设置为“创建”。这将允许代码生成器输出将要使用的表单的基本结构。

请注意,在这里,或者任何时候尝试添加视图时,如果项目模型没有通过构建项目来更新,类型不会出现在“视图数据类”下拉菜单中。如果是这种情况,可以取消,构建,然后重新打开对话框。

生成的页面是一个非常方便的起点。即使它没有为节省太多时间(毕竟所做的更改和删除),出于某种原因,它让感觉更好,因为计算机也做了一些工作。

让稍微清理一下。移除验证控件,删除包含“返回列表”链接的DIV,并更改H2为更有趣的内容。

因为不会将表单回发到Index动作方法,还需要更新using语句,以便为提交表单创建正确的调用:

Html.BeginForm("CreatePerson", "Home")

最后,让添加一些代码,对应的方法CreatePerson,以及在HomeController中的一个断点:

public ActionResult CreatePerson(Person person) { // 断点位置 return View(); }

上述代码实际上并没有做任何事情(也不会在断点之后去任何地方),但如果按照建议暂停并评估Person对象或分配给字符串的名称,将看到值被填充。

模型绑定是如何工作的?

实际上有很多深入的解释,但这里是所做的以及MVC框架支持模型绑定的总结:

  • 有一个具有公共属性的类
  • 模板引擎为创建了一个页面,其中包含HTML帮助器TextBoxFor
  • TextBoxFor使用公共属性的名称生成具有相同名称的表单输入
  • 模板创建了一个表单来托管这些控件,将其指向控制器和动作
  • 当写入到浏览器时,表单操作设置为“/Home/CreatePerson”,使用POST动词
  • MVC框架将表单提交路由到HomeController,然后使用反射找到CreatePerson方法
  • 因为该方法接受Person对象作为参数,MVC框架评估HTTP请求(查询字符串参数,表单值),然后为创建一个对象

让事情变得有趣

到目前为止,这只是MVC框架中简单模型绑定的演示。让让jQuery参与进来。

  • 将控制器动作更改为部分视图结果
  • 创建一个部分视图以显示创建的人
  • 将jQuery和jQuery UI添加到Site.Master文件中
  • 从Index页面中移除using语句
  • 修改输入,使其更容易在jQuery中选择
  • 添加一个DIV来存储创建结果
  • 为出生日期添加日历选择器
  • 当用户点击按钮时,通过jQuery提交表单
  • 在部分视图结果返回时清除表单,并显示结果

首先,通过将方法更改为仅接受POST并简单地将传递的Person对象返回到PartialView来开始。

[HttpPost] public ActionResult CreatePerson(Person person) { return PartialView("PersonDetails", person); }

这次将创建视图为部分视图,它将再次强类型为Person,但将视图内容设置为“详细信息”。

Visual Studio 2010中的MVC框架工具支持将为创建ASCX(服务器控件),显示所有字段。

删除生成的控件末尾的P标签,其中包含ActionLinks,只留下顶部的控件标签和FIELDSET控件。

接下来,进入Views——>Shared——>Site.Master并将jQuery添加到master页面的HEAD中。也将同时添加jQuery UI,以打开一些其他增强功能的大门。为了完全功能,项目中需要有CSS和images文件夹,以及在master页面的HEAD中链接的CSS。

在Index.aspx中,移除using语句,以便不再生成表单。如果使用Visual Studio 2010的可折叠区域,这很容易(可以折叠FIELDSET标签以查看整个using构造)。

在Index.aspx底部的提交按钮上添加一个ID,值为“create-person-button”。最后,在开始脚本之前,添加一个DIV来显示当人被“创建”时的部分视图。最后两个部分应该如下所示:

<div id="result"></div>

转到脚本

jQuery为提供了一种通过POST向服务器发送AJAX请求的简单方法。传递一个服务器期望的数据映射。结果可以传递给一个函数来评估结果。

有了这样的输入设置和占位符…呃…占位符,都已经准备好执行POST了。

将编写一个帮助函数来处理POST操作的结果,当然,还有一个jQuery的‘文档就绪’事件处理程序来设置日历并捕获提交按钮点击。

大部分代码应该很容易理解。一个有趣的部分是数据映射不需要用正确的大小写构造。也就是说,如果字段名是FirstName,可以在数据映射中使用FiRsTnAmE作为名称,这是可以的。

运行应用程序并享受!

jQuery UI日期选择器在行动:

表单提交后清除,显示POST的结果:

一些注意事项

到目前为止,还没有设置任何验证,没有保存到任何数据库,如果服务器端出现错误,就完蛋了。

不幸的是,jQuery POST与未处理的异常在服务器上不兼容。$.post是$.ajax的子集的简写(带有一些预设),并且只为成功事件映射了一个处理程序(不是错误事件)。

要看到这一点,呃,在不活动状态中,将CreatePerson动作更改为以下内容:

public ActionResult CreatePerson(Person person) { return View("foo", person); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485