2016-08-23 103 views
0

我有一个ASP.Net Application与简单WebForms。有一些页面用于插入和更新数据库中的记录。如何防止输入值在表单中提交?

但是,在某些情况下,某些输入控制值不应更新。所以,我已经设置了disabled属性来防止用户更新值。但是,用户也可以从开发人员工具中启用它并直接更改值。

如果我删除使用javascript那么该控件的值不会在表单提交的元素name属性,它不会在服务器端(它完美)影响。但是,如果用户在name属性中重新指定了相同的值(,即'ctl00$ContentPlaceHolder2$txtBranchCode'),则输入框的值将再次提交(这应该不会发生)

代码:

<td align="left"> 
    <input name="ctl00$ContentPlaceHolder2$txtBranchCode" type="text" value="HO" 
     id="ctl00_ContentPlaceHolder2_txtBranchCode"> 
</td> 

现在,我想的是,如果我可以防止形式那么我的问题就可以迎刃而解要提交的元素值。我无法在每个页面添加条件“如果控件被禁用,则不应更新。”有很多页面,我必须在每一页都做同样的工作。如果有共同的解决方案,那么它会更好。

+0

唯一安全可靠的方法是在服务器上执行此操作。你需要检查是否应该使用该值,如果不是,则忽略它。您已经说过,客户上做的任何事情都可以改变。 – webnoob

+0

是@webnoob我知道服务器端验证更好,但我无法修改所有页面,它太多了。所以,我试图找到一个通用的解决方案。如果我可以从asp窗体注销控件,Asp Form不会发布该控件的值。 – Shell

+0

不仅更好 - 唯一安全的方式。如果您现在面临着这个架构的问题,您将来可能会再次面对这个问题。为什么在许多地方必须采用相同的逻辑?你能否将某些功能压缩到可以为你做这个验证的基类/服务?我理解这可能意味着需要做很多工作,但这取决于这是多少要求。 – webnoob

回答

0

您不能相信客户端代码来控制数据库中的更新。 你应该做的是编写一些服务器端代码来完成这项工作。客户端代码可以很容易地由客户端操纵,你不能相信它。

0

如果不应更新输入控制值,请勿通过设置Visible="false"来呈现控件。

服务器端验证更安全,而客户端验证提供了更好的用户体验,因此存在折衷。理想情况下,两者都应该到位,客户端验证的用户体验更好,并通过服务器端验证来保护服务器资源和数据库。

+0

我无法使控件不可见。用户可以看到控制的值,但不应该允许编辑它。我的应用程序中有很多页面因此,如果每个页面都启用了控件,则无法将条件更新。 – Shell