0

假设我们有一个 WebKitBrowser 控件,并且我们将 DocumentText 设置为...

wkb.DocumentText = @"
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'>
<html>
<head></head>
<body>
<form>
<input type='text' id='test' name='smith'><br>
</form>
</body>
</html>
";

如果我要通过 C# 在该输入字段中获取用户输入,那么正确的方法是什么?

如果我在 HTML 中预定义 value 属性,例如...

<input type='text' id='test' name='smith' value='freedom'>

然后MessageBox.Show(wkb.Document.GetElementById("test").getAttribute("value"));准确地显示“自由”。但是,如果未定义 value,则结果始终为空(我假设它为 null 而不仅仅是空)。

这对我来说很有意义,但我会获取用户输入,而不是预定义的值。我想可以将整个文档保存到一个字符串并解析它,但在标准 IE 浏览器控件中使用element.value路由要简单得多。我的美味选择是什么?

4

2 回答 2

0

您无法在 C# 客户端读取表单值。您必须发回(AJAX 或完整回发)表单以读取 C# 中的值。如果您想查看某个值是否已更改,可以使用 jQuery.on('blur' ...捕获更改的值并将 AJAX 发送回服务器。

于 2013-03-15T04:11:49.047 回答
0

我还想补充一点,这种方法有效,有点偏离 viperguynaz 的正确答案。

本质上,您为 webkit 浏览器控件创建导航方法,然后将 webkit 浏览器控件指向事件部分。你在 HTML 端执行一个功能上无用的表单提交,然后解析用户输入的参数,然后你就可以去,任何等待你的幻想。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using WebKit;

namespace test_run
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            wkb.DocumentText = @"
                <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'>
                <html>
                <head></head>
                <body>
                <form method='get'>
                <input type='text' name='pike'><br>
                <input type='submit' value='Submit'>
                </form>
                </body>
                </html>";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void wkb_navigating(object sender, WebKitBrowserNavigatingEventArgs e)
        {
            string param1 = HttpUtility.ParseQueryString(e.Url.ToString()).Get(0);
            MessageBox.Show(param1.ToString());


        }
    }
}
于 2013-03-15T19:01:54.983 回答