mvc与webform比较,mvc视图中为什么不建议用服务器控件?

mvc与webform比较,mvc视图中为什么不建议用服务器控件?,第1张

先说服务器控件,把大部分属性序列化成ViewState,后台可以很方便的进行交互,但是当你页面里服务器控件多,或者有一个GridView的时候,ViewState隐藏表单的值会惊人的长.而服务器控件的各个事件,也是通过提交表单的方式将消息传递到服务器,再由服务器响应.这样带来的纯粹只是开发上的便利,运行效率是无法谈起的.

就我个人感觉,MVC其实是想把ASP.NET的网站从传统冗余的ViewState里解放出来.在MVC里通过最传统的POST或者GET传值,这样不仅利于我们控制,而且生成的页面简洁的多.

这些都是一些网上的说法和我自己的经验,具体用不用还是看你.因为就算用服务器控件,也是可以编译通过的.

至于呈现数据的话,我感觉这个不算什么问题啊.可能你没接触过那些解释型语言,在不用服务器控件的环境下,若得到单个数据,用<%%>标签输出即可若得到一个集合数据,进行遍历就可以循环展示.

区别:服务器端控件都会有个runat="Server"属性,

这样才能够在后台对其进行设置修改,

也就是在cs代码里面能对其修改设置。

你做下测试 你放个HTML控件 在CS代码是引用不出控件名的

然后你个HTML控件加上runat="Server" 在CS代码就能引用该控件了

本质上ASP.NET 的服务器控件 解析后返回到前台还是HTML控件

你建个页面 放一个asp:textbox上去

然后运行页面,然后查看页面源文件

你会发现放上的服务器控件变成了HTML的inupt type="button"

至于你说的视图状态应该是说这个吧:

由于HTTP连接属于无状态的,每次页面请求都无法记录上次请求页面的信息。

那么要保存上次请求页面上控件的值,也就是页面刷新后,填写的值不变,比方在textbox填了个‘a’,页面刷新后还是'a',.NET框架为实现这种机制,于是就用到了viewstate视图状态来保存这些控件的值,

那么将所有控件的值存在什么地方呢?你可以运行你的程序,然后在页面中查看源文件,就可以看到一个input type="hidden" name="__VIEWSTATE"的标签,这个就是你所谓的”视图“,它是经过服务器序列化过的,然后服务器接收后会反序列化这些隐藏域的值然后又从新给这些控件赋值,从而页面刷新后还能记录上次请求时候的所有控件的值。服务器控件都会默认保存VIEWSTATE的 有个属性(EnableViewState)可以设置的, 设置为Flase就不保存了,页面刷新后,值也就没了,可以做个测试放个textbox设置为EnableViewState为false,然后输入个值,然后再用按钮去刷新页面,那么textbox会为空,因为没有视图状态记录到上次你输入的值。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/645279.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-21
下一篇2023-07-21

发表评论

登录后才能评论

评论列表(0条)

    保存