我有兴趣确定一种方法来验证服务器端验证是否按预期执行,但需要绕过使用ASP.NET验证控件完成的客户端验证。为了测试这一点,我尝试使用Firefox的表格海报插件,允许我获取/修改页面内容并发布它,但.NET框架将提交解释为有害并引发应用程序错误(“A潜在的从客户端“)检测到危险的Request.Form值。
我已经创建了一个包含WebBrowser控件的WinForm,我可以操作网页的内容并调用按钮点击,但我很想知道如何允许使用无效输入值的回发。我不想假设服务器端验证工作(即使我在回发时检查服务器上的Page.IsValid)。任何建议将不胜感激。
这会在WebBrowseer控件中提交Web表单,并且会触发预期的客户端验证:
extendedWebBrowser1.Document.GetElementById(formButtonName).InvokeMember("click");
这就是我操纵一些页面内容的方式(这只是阻止了提交):
mshtml.IHTMLDocument2 doc = extendedWebBrowser1.Document.DomDocument as mshtml.IHTMLDocument2;
string html = doc.body.innerHTML;
html.Replace("Page_ValidationActive = false", "Page_ValidationActive = true");
doc.body.innerHTML = html.ToString();
extendedWebBrowser1.Document.GetElementById(formButtonName).InvokeMember("click");
答案 0 :(得分:1)
只需在您选择的浏览器中关闭Javascript即可。这将强制调用服务器端验证。
答案 1 :(得分:1)
所有验证Web控件都有EnableClientScript
property。默认设置为True,但如果将其设置为False,则验证控件将不发出客户端验证脚本。
另一种选择是将Page
的{{3}}设置为“下层”。这将强制页面呈现,就好像它被下层浏览器访问一样。在这种情况下,验证控件将不呈现JavaScript以进行客户端验证。
正如肖恩·亨特所指出的,另一个选择就是在浏览器中禁用JavaScript。如果你走这条路线我建议使用Firefox的免费ClientTarget
property,因为这样可以轻松打开(或关闭)特定网站的脚本。
答案 2 :(得分:0)
设置
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Services.aspx.cs" Inherits="SomeClass"
MasterPageFile="~/Master/Main.Master" Title="Title" ViewStateMode="Disabled" EnableEventValidation="false" %>
EnableEventValidation =“false”&lt; - 这就是你需要的