ASP.NET-FineUI开发实践-4

2023-12-06 11:48
文章标签 实践 开发 asp net fineui

本文主要是介绍ASP.NET-FineUI开发实践-4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  最近实在没时间研究东西,FineUI一直也没进一步实践,但是还是很想学点东西,所以找了个课题研究了下,在论坛里看见了又下角的提醒,自己想了想做了一个,我不是大神,接触EXTJS很少,就是用到哪看哪,没有系统的学习,所以这次做的不细只是提供下思路和学习方法,可以让初学者借鉴探讨。以下环境为官方实例FineUI4.0.6。

1.JS文件

首先运行项目进入default.aspx,右键查看源文件看见引用了三个JS文件<script src="/extjs/ext-part1.js" type="text/javascript"></script><script src="/extjs/ext-part2.js" type="text/javascript"></script><script src="/extjs/lang/zh_CN.js" type="text/javascript"></script>


最后一个是语言包,前两个都是FineUI自己基于EXTJS写的js包,打开有看到ext-part1是压缩(没有格式)的,ext-part2没有压缩,可以看成是FineUI写的js方法的增强或者重写。

default.aspx 在最后还引用了default.js文件,打开后都是本页的一些配置文件,写在F.ready()里,页面加载执行。这里要重申下FineUI的NO js 是页面上尽量减少JS的使用,其实都是打包好的。基于EXTJS.NET 不可能没有JS。

2.实现右下角提醒准备

2.1又下角的提醒很常见,我借鉴了FineUI论坛里的这个

可以看见基本元素有标题,翻页,关闭,不可拖动,不可调整大小,在页面顶端等。这让我想到了window组件,window打开时就是层级置顶的,而且有标题、不可拖动、关闭、不可调整大小等属性。页面里的消息我选择了Label控件。


传图片是因为不能一下看懂的可以自己把代码敲上理解一下。 Lable里 Label="1" ShowLabel="false" 没用,我写的玩的。

2.2下面要准备的就是显示,FineUI window.cs文件里提供了获取显示窗体的客户端脚本的方法GetShowReference,还有其他各种重载,到最后用返回的是f_show的js方法。要显示我的window_tips就是要重写f_show方法,在ext-part2.js里一下就搜到了,复制粘贴,取个名字叫f_showTips,


简单的看一下就是重写iframeUrl和标题,然后再执行wnd.show()(wnd就是window的缩写)方法,这个就够用了wnd.show就不重写了,也在这个js里,搜索‘show:’不是很难看懂。同样找到了关闭的方法 f_hide也看到了怎么实现的 ,还是用这个,没必要写新的。

2.3显示和关闭准备好了就是信息的显示还有翻页功能,明显window的标题那一行就有标题关闭最大化什么的,要自定义添加俩按钮还得用脑子,一下子就想起来default.js里预备下了


这个是FineUI4.0新加的,在树菜单的顶上加了个设置的图标点完了显示个菜单。正常的往回缩怎么能有个设置按钮呢,.aspx文件里也没有这个的按钮所以肯定就是js自己做了什么。


看的懂的参数第一个是类型,第二个是提示,第三个不知道,第四个就是按钮点击触发的方法。要实验我的蒙的对不对要先把window_tips的ClientID传过去,详见页面上GetClientIDS方法,在js接一下,


怎么实践的就不说了就是传个带ShowHeader="true"的控件看看有没有加上就行,是成功了,但是跑到关闭那个X的右侧了,因为是新增的,插入到左侧我也不会,干脆连关闭一块新增,但是都是设置图标,应该跟tyoe有关系,gear是设置的意思,其他的type我也没不知道啊。显示的是个图标那肯定跟样式有关,果断F12


嗯,被发现了,他旁边那个就是向左样式是x-tool-img x-tool-collapse-left,collapse是隐藏属性,隐藏-向左,左右关闭就都出来了,

  window_tips.addTool({
type: 'left',
tooltip: '上一条',
regionTool: true,
handler: function (event, toolEl, panelHeader) {
});
window_tips.addTool({
type: 'right',
tooltip: '下一条',
regionTool: true,
handler: function (event, toolEl, panelHeader) {
}
});
window_tips.addTool({
type: 'close',
tooltip: '关闭',
regionTool: true,
handler: function (event, toolEl, panelHeader) {
window_tips.hide();//关闭方法
}
});
关闭按钮我把关闭方法加上了。

2.4还有就是window的显示位置,提醒肯定是在右下角,在官方的教程里提到位置黄金分割点,在ext-part2.js wnd.show()里找到了定义位置的方法,

if (left !== '' && top !== '') {
panel.setPosition(parseInt(left, 10), parseInt(top, 10));
} else {
var bodySize = target.window.Ext.getBody().getViewSize();
var panelSize = panel.getSize(), leftTop;
if (isGoldenSection) {
leftTop = _calculateGoldenPosition(bodySize, panelSize);
} else {
leftTop = _calculateCenterPosition(bodySize, panelSize);
//panel.alignTo(target.Ext.getBody(), "c-c");
}
panel.setPosition(leftTop.left, leftTop.top);
}

找能看的懂的,不多解释,总之在f_showTips下面加个方法

 f_tipsPosition:function(){
var left =  Ext.getBody().getViewSize().width - 4 - this.width;
var top =  Ext.getBody().getViewSize().height - 4 - this.height;
this.f_property_left=left;
this.f_property_top=top; 
this.setPosition(left, top);
},

在default.js里触发,window_tips.f_tipsPosition();就行了。

2.5左右信息的图标有了,还没有方法,可以写成dopostback获取,也可以执行JS,当然是写JS,把数据放个参数里,是个json再用js解析,不提了,直接看代码。

3.完成 f_tipsPosition没粘

ext-part2.js

     //显示提醒窗体;
//iframeUrl窗体的url,目前未考虑传'';
//windowTitle窗体的title,目前未考虑传'';
//txthtml窗体显示的数据
//width窗体的宽,目前未考虑传'';
//height窗体的高,目前未考虑传'';
f_showTips: function (iframeUrl, windowTitle,txthtml, width, height) {
if (typeof (iframeUrl) === 'undefined') {
iframeUrl = this.f_iframe_url;
}
if (typeof (windowTitle) === 'undefined') {
windowTitle = this.title;
}
window.label_html=txthtml;//显示数据存到全局参数里
window.label_html_num=0;//第一次打开重置查看到第几条
this.f_showtips_label(label_html);//显示方法,传入数据
windowTitle="消息提醒"+"   "+(label_html_num+1)+"/"+txthtml.length;//拼写标题
//原show方法
F.wnd.show(this, iframeUrl, windowTitle, this.f_property_left, this.f_property_top, this.f_property_position, this.id + '_Hidden', width, height);
},
//显示信息方法
//txthtml信息
//t翻页方向
f_showtips_label:function(txthtml,t){
//计算翻到第几页了
var nub=label_html_num;
if (t=='left') {label_html_num=window.label_html_num-1;}
if (t=='right') {label_html_num=window.label_html_num+1;}
if (typeof (txthtml[label_html_num]) == 'undefined') {
label_html_num=nub;
}
//设置标题
this.setTitle("消息提醒"+"   "+(label_html_num+1)+"/"+txthtml.length);
//显示信息,JQ方法,ID写死了,JSON格式所以写成 txthtml[0]
$('#window_tips_window_tips_label-inputEl').text(txthtml[label_html_num]);
}

default.js

 //新增翻页按钮
window_tips.addTool({
type: 'left',
tooltip: '上一条',
regionTool: true,
handler: function (event, toolEl, panelHeader) {
window_tips.f_showtips_label(label_html, 'left');//触发翻页方法
}
});
//新增翻页按钮
window_tips.addTool({
type: 'right',
tooltip: '下一条',
regionTool: true,
handler: function (event, toolEl, panelHeader) {
window_tips.f_showtips_label(label_html, 'right');//触发翻页方法
}
});
//新增关闭按钮
window_tips.addTool({
type: 'close',
tooltip: '关闭',
regionTool: true,
handler: function (event, toolEl, panelHeader) {
window_tips.f_hide();
}
});
//定位坐标
window_tips.f_tipsPosition();
//网上找的
Ext.EventManager.onWindowResize(window_tips.f_tipsPosition, window_tips); //window大小改变时,重新设置位置
Ext.EventManager.on(window, 'scroll', window_tips.f_tipsPosition, window_tips); //滚动时重新设置位置

传值

protected void MenuButton1_Click(object sender, EventArgs e)
{
List<string> liststr = new List<string>();
liststr.Add("消息一");
liststr.Add("消息二");
var resultObj = JsonConvert.SerializeObject(liststr);
PageContext.RegisterStartupScript(window_tips.GetShowTips(String.Empty, String.Empty, Unit.Empty, Unit.Empty, resultObj));
}

Window.cs加了方法

/// <summary>
/// 返回右下角提醒JS
/// </summary>
/// <param name="iframeUrl">地址</param>
/// <param name="windowTitle">标题</param>
/// <param name="width">宽</param>
/// <param name="height">高</param>
/// <param name="innerHtml">JSON值提醒的HTML</param>
/// <returns></returns>
public string GetShowTips(string iframeUrl, string windowTitle, Unit width, Unit height, string innerHtml)
{
if (!String.IsNullOrEmpty(iframeUrl))
{
iframeUrl = ResolveIFrameUrl(iframeUrl);
}
iframeUrl = JsHelper.GetJsStringWithScriptTag(iframeUrl);
windowTitle = JsHelper.GetJsString(windowTitle);
if (width != Unit.Empty && height != Unit.Empty)
{
return String.Format("{0}.f_showTips({1},{2},{3},{4},{5});", ScriptID,
iframeUrl,
windowTitle,
innerHtml,
width.Value,
height.Value);
}
else
{
return String.Format("{0}.f_showTips({1},{2},{3});", ScriptID,
iframeUrl,
windowTitle,
innerHtml
);
}
}


4.扩展

遗憾的是没有时间在完善下,标题,传iframeUrl,标题,定义大小都没写。显示和隐藏的滑动效果没有,这个还得学...,很突兀的显示和关闭了,FineUI并没有提供动画的方法。

5.后记

其实实现的方法有很多,我又不是专业的,自己弄出来有成就感,只是给刚入门的人看的,想说的是FineUI中提供了很多现成的可以学习的代码,肯研究的都能自己做点东西,FineUI是开源的后台的C#方法和js方法都是现成的谁也没说不能改。谁要是有现成的例子给我也共享个,我很愿意学习学习。

这篇关于ASP.NET-FineUI开发实践-4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461725

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像