C#.Net MVC _01

 

 

C#.NET开发遇到的问题记录

                    —— 前台字段的控制

初入职场,第一次正式使用MVC模式。在实现一个系统后台用户管理模块时遇到一点小问题。做个笔记记录,供以后参考完善。

 

 

 

首先,需求是一个类似于修改用户信息并提交表单到后台数据库的操作。但是,由于某些权限的要求,需要设置有部分栏位在当前登录的账户下是只允许查看,不允许修改的。

这里,很容易就可以想到 disable 属性、readonly 属性、Display写法与unselectable写法。

 

 

        如下: @Html.TextBoxFor(t => t.USERNO, new { @disabled = "disabled" })

            或:@Html.DisplayFor(t => t.USERNO)

            或:@Html.TextBoxFor(t => t.USERNO, new { @readonly= "readonly" })

            或@Html.TextBoxFor(t => t.USERNO, new { @unselectable= "on" })

而这三种写法单独的效果分别是:

 

 

                    disable 属性  -- 展示的效果符合要求(有边框,灰色,不可修改)。但是提交的却是 null 值

                    readonly属性 -- 可以提交,也确实不可修改。但是由于鼠标点上去会有光标闪烁,切颜色与普通text一样,用户体验效果不是很好

                    DisplayFor写法 -- 没有文本框的边框,仅仅展示数据,对于一个表格样式而言,显得十分突出。

                    unselectable写法  -- 不能选中。自然也不可修改,也可以提交。就上面需求而言最符合要求的写法。

 

 

 

 

最终,我个人使用的是 disable 的效果,当然,null 值对目前我所遇到的案例来说几乎没有影响,因为,不允许修改的四个栏位中有一个栏位是主键,必须提交,而其他三个栏位既然不允许修改,那也没有必要提交,SQL 的 PDATE 句中不更新这三个栏位即可,对于主键栏位,只需要添加一个隐藏域,如:@Html.TextBoxFor(t => t.USERNO, new { @readonly = "readonly", @hidden = "hidden"})  或  @Html.Hidden(t => t.USERNO)即可。意外的是,在这里有一个小插曲,IE6  7的浏览器貌似不支持第一种hidden属性的Razor语法,直接导致页面上显示两个输入框。

 

 

 

但是最终的问题是。如果有部分字段,仅仅是部分用户不可修改,其他用户依然可以修改的,那样的话 SQL 语句中是不可能不更新这种字段的。

可能会有人想到,将类似于这种需求的栏位全部同上主键栏位一般,采用disable + hidden的写法。

 

 

貌似这样理论上是可行的。但是,别忘了 F12 开发者选项这个逆天的神器。

F12之后,直接将 disable 属性或者 hidden属性删掉,然后修改数据,是依然可以正常提交的。

鉴于上面我目前所做的项目而言,因为唯一一个不允许修改且必须提交的栏位是主键,同时也是 UPDATE 语句的条件,所以即使这样操作了,也不会修改成功。

 

 

但是如果遇上其他的不允许修改且必须提交的非主键非UPDATE语句条件的栏位。恐怕不管是前台的disable还是readonly,都会存在一定的安全风险。所以,这种限制或者需要在后台去完成。

 

不知怎么写可以完美解决?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HolaSecurity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值