在有的时候,会有这样的需求,就是某个列表不允许任何人编辑,大家第一时间肯定都会想到用权限来控制,但是这样的话总归是开了后门,只要有人有权限就可以去编辑,在这里,我通过前端的控制来禁用编辑。
这里以2007为例,在2010中可以也可以使用此方法,首先我在网站集上建立一个列表TestList,它有三列,分别为“标题”,“TestField”和“ReadOnlyField”,如下:
现在我需要禁止任何人编辑“TestField”列,怎么做呢?首先我用SPD 2007打开TestList列表:
然后找到EditForm.aspx,将其在IE中打开,然后右键选择“查看源文件”,就会弹出一个记事本文本文件,如果要确定自己打开的是不是EditForm.aspx的源文件,就在文本中搜索一下,看看能不能找到如下一段:
1 <form name="aspnetForm" method="post" action="EditForm.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">
如果可以找到,那就证明你找对了,然后在此文本当中找到如下一段:
1 <TD valign="top" class="ms-formbody" width="400px">
2 <!-- FieldName="TestField"
3 FieldInternalName="TestField"
4 FieldType="SPFieldText"
5 -->
6 <span dir="none">
7 <input name="ctl00$ctl12$g_cff13d4c_763d_4317_a25d_69f6d6d97853$ctl00$ctl04$ctl01$ctl00$ctl00$ctl04$ctl00$ctl00$TextField" type="text" value="TestField 字段值。" maxlength="255" id="ctl00_ctl12_g_cff13d4c_763d_4317_a25d_69f6d6d97853_ctl00_ctl04_ctl01_ctl00_ctl00_ctl04_ctl00_ctl00_TextField" title="TestField" class="ms-long" />
这里的name属性就是TestField的name,然后我们就可以使用javascript来禁用这个字段的编辑,具体语句如下:
document.<formname>.<textboxname>.disabled="true";
然后在SPD 2007中将EditForm.aspx签出,编辑,在<WebPartPages:WebPartZone><ZoneTemplate>…</ZoneTemplate></WebPartPages:WebPartZone>后加入如下Script语句:
1 <script language="javascript">
2 document.aspnetForm.ctl00$ctl12$g_cff13d4c_763d_4317_a25d_69f6d6d97853$ctl00$ctl04$ctl01$ctl00$ctl00$ctl04$ctl00$ctl00$TextField.disabled="true";
3 </script>
现在我添加一条项目,然后在编辑页面查看,TestField确实不让我编辑了,效果如下: