博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC中Unobtrusive Ajax的妙用
阅读量:6880 次
发布时间:2019-06-27

本文共 2654 字,大约阅读时间需要 8 分钟。

Unobtrusive Javascript有三层含义:一是在HTML代码中不会随意的插入Javsscript代码,只在标签中加一些额外的属性值,然后被引用的脚本文件识别和处理;二是通过脚本文件所增加的功能是一种渐进式的增强,当客户端不支持或禁用了Javsscript时网页所提供的功能仍然能够实现,只是用户体验会降低;三是能够兼容不同的浏览器。

启用Unobtrusive Javascript的步骤:

1.在web.config文件中加入

2.在网页中加入

   

使用Unobtrusive Ajax主要有两个用途:做客户端的输入验证和异步的表单提交。客户端验证基本上是自动的,不用做特别的处理。下面用一个例子重点说一下提交表单。

数据模型是这样的:每个类别有很多属性,属性可以分组,属性组可以嵌套。然后在网页创建和编辑属性组,示意图如下:

这是我半年前写的代码:

$(this).find(".CreatePropertyGroup").click(function () {
$(".InputGroupName").hide(); var id = $(this).next().val(); var td = $(this).parent().parent(); $.post("/Category/CreatePropertyGroup", { parentId: id, name: $(this).prev().val() }, function () {
td.load("/Category/PropertyGroup", { "id": id, "resultType": "html" }, loadGroupReady); }); });
$(this).find(".CreateProperty").click(function () {
$(".InputPropertyName").hide(); var id = $(this).next().val(); var name = $(this).parent().find(".PropertyName").val(); var type = $(this).parent().find("#PropertyDataType").val(); var unit = $(this).parent().find(".PropertyUnit").val(); var range = $(this).parent().find(".ValueRange").val(); var td = $(this).parent().parent(); $.post("/Category/CreateProperty", { groupId: id, name: name, type: type, unit: unit, range: range }, function () {
td.load("/Category/PropertyGroup", { "id": id, "resultType": "html" }, loadGroupReady); }); });

完全使用jQuery获取控件值和提交,可读性和可维护性不是很好。现在改用Ajax.BeginForm之后,很大地简化了编程:

对于不使用的表单的,直接点链接的可以用Ajax.ActionLink:

        @Ajax.ActionLink("删除", "DeletePropertyGroup", new { categoryId = categoryId, path = path, name = property.Name },        new AjaxOptions        {
HttpMethod = "Post", Url = Url.Action("DeletePropertyGroup", new { categoryId = categoryId, path = path, name = property.Name }), Confirm = "确认要删除 '" + property.Name + "' 及其所有属性吗?", UpdateTargetId = "PropertyGroup" })

最终运行后生成的代码如下:

属性组名称:

可以看到魔力就在于以data-ajax开头的一些属性中,当Javascript被禁用后,表单仍能提交,链接也能点开,只不过不再是异步的了。

转载于:https://www.cnblogs.com/webenh/p/6165325.html

你可能感兴趣的文章
python里的拆包、引用、递归与匿名函数
查看>>
关于前端项目代码检测~
查看>>
初探 BaconJS
查看>>
使用CDN(Content Delivery Network)加速站点访问速度汇总指北
查看>>
区块链生态圈应用落地须了解区块链共识技术开发
查看>>
ES6学习文档(更新至第7节)
查看>>
再次理解伪类选择器:nth-child(){……}
查看>>
MongoDB 在windows服务器安装部署与远程访问配置
查看>>
iOS实现类似苹果手机原生的锁屏界面(数字密码)
查看>>
[vue] 表单输入格式化,中文输入法异常
查看>>
Observer观察者模式与OCP开放-封闭原则
查看>>
如何搭建高级工程师知识框架?推荐两种方式
查看>>
BAT的医疗春秋大梦
查看>>
Pulsar本地单机(伪)集群 (裸机安装与docker方式安装) 2.2.0
查看>>
利用H5的css3制作动画
查看>>
Android View 事件分发源码分析
查看>>
vue 2.0 - props
查看>>
RustCon Asia 实录 | Rust 在国内某视频网站的应用
查看>>
Vue遇上Analytics
查看>>
mysql
查看>>