【问题标题】:How to retrieve value from the onclick element using IE in C#如何在 C# 中使用 IE 从 onclick 元素中检索值
【发布时间】:2018-02-13 17:53:32
【问题描述】:

我一直在开发一个项目,其中我需要登录我们的内部服务器网页并更新表单中的值并将数据提交到服务器。主要问题是,在提交或单击保存按钮时,Internet Explorer 会显示一个弹出按钮,上面写着“您需要保存数据,是还是否?”。选择“是”后,数据被提交,我得到另一个弹出按钮显示“数据已提交”。但是,如果存在重复数据,则会弹出验证错误,显示数据已存在。我无法捕获该方法返回的值。

由于它是内部服务器链接,我无法从公司桌面发布屏幕截图或链接,我正在分享 Internet Explorer 中的以下 HTML 代码。

<a id= "saveButton" onclick="submitter('Save'); return false;" href="" shape= "">

C# 代码

InternetExplorerMedium IE = new InternetExplorerMedium();
HTMLDocument hdoc = new HTMLDocument();
IE.visible = true;
IE.Navigate("Internal web server page");

更新表单中的所有值后,使用以下代码导航到表单的“保存”按钮

hdoc.all.item("saveButton").click();

所以我需要获取 onclick 元素的返回值,即它是真还是假。我试过hdoc.parentWindow.execscript("submitter('Save'); return false;","javascript"); 但它什么也没做。 InvokeScript 似乎不适用于 IE。有没有人处理过这样的查询?

注意 - InternetExplorerMedium 是打开内部服务器网页的唯一途径。 InternetExplorer 类在加载页面时没有任何帮助。

【问题讨论】:

  • ASP.NET 是否与 C# 一起用于您的内部 Web 应用程序?
  • 你使用这样的设计模式... 保存....或者使用asp.net 提交按钮而不是 html 超链接.....这是您的提交者脚本在验证输入字段时返回 true 或 false ... true 表示数据已提交,false 表示数据尚未验证,并且表单数据不会发送到服务器以在数据库中更新。对于您的 asp.net 项目,您应该使用 asp.net 控件集,例如。 asp:hyperlink asp:submitbutton 在你的代码后面...在你的 VSIDE 模板项目中有示例。
  • @RobParsons 和 @JohnH,我没有实现 asp.net。这是一个简单的 Windows 表单,它从 excel 中获取数据并上传到 Web 服务器页面。
  • 我们需要从您的内部(内联网)网页中查看函数提交者...。通常网络表单不使用超链接来提交网络表单(
    元素)。消息“您需要保存表单数据”表明您的锚标记 () 正在导航而不是提交表单。我的答案中附有一个模板网络表单。

标签: javascript c# jquery html internet-explorer


【解决方案1】:
<form name="myform" onsubmit="return submitter(event);" action="/account/login.php">
<label>name:<br/>
<input name="txtname" id="txtname" />
</label>
<label>secret:<br/>
<input type="password"/>
</label>
<input type="submit" value="Login"/>
<input type="reset" value="Reset"/>
</form>

<script type="javascript/text">
function submitter(evt){
// return true or false to allow the form to be submitted.
// do your field validations in this function.
}
</script>

为了帮助您,我们需要查看您尝试从 C# 自动化的内部网页的标记和脚本......看起来该网页设计不正确(不使用上述设计模式).. .流程是 1. 加载带有表单的网页。 2. 用户在表格中输入数据。 3. 用户单击表单的提交按钮...这会触发表单 onsubmit 事件处理程序(提交者),然后它应该验证输入的数据。如果它的有效提交者返回 true 并且表单数据被提交到服务器(表单的动作属性)。如果数据无效,则提交函数返回 false,取消 onsubmit 事件处理程序。

【讨论】:

  • 下面是我网页的detail.js中的提交函数。 function submitter(str) OK = true if(str = 'save') { ValInit(detailFormObj); if(prevalidationflag) preValidation(); OK=ValResult(); } if(OK) OK=Confirm("Are you sure you want to"+str+"?"); if(OK){ if(str = "duplicate"){switchToDuplicate(); }else{ if(detailFormObj.requestID.value != 'duplicate' &amp;&amp; detailFormObj.requestID.value != 'saveNew') detailFormObj.requestID.value = str; if(document.waitIndicator) enableContents(detailFormObj); formSubmitter(detailFormObj); } } }
  • 因为是客户端网页,所以无法更改现有功能。
  • 我尝试使用链接 [social.msdn.microsoft.com/Forums/windows/en-US/…] 实现 Win32 API,但失败了。我不明白什么时候应该调用 IE.HTMLDoc.parentWindow.eval("submitter('save')","javascript");
  • 你的脚本有错误 function submitter(str) OK = true if(str = 'save') { ValInit(detailFormObj); if(prevalidationflag) preValidation(); OK=ValResult(); } if(OK) OK=Confirm("你确定要"+str+"吗?"); if(OK){ if(str = "duplicate"){switchToDuplicate(); }else{ if(detailFormObj.requestID.value != 'duplicate' && detailFormObj.requestID.value != 'saveNew') detailFormObj.requestID.value = str; if(document.waitIndicator) enableContents(detailFormObj); formSubmitter(detailFormObj); } } }
猜你喜欢
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 2012-08-25
  • 2020-10-31
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多