如何将C#文本框txtPath的值传递至HTML文本框txtWebPath?
当然可行!实现C#程序与内嵌HTML网页的路径值传递
这本质上是桌面应用和内嵌网页之间的JS交互问题,只要通过调用网页中预先定义的JS函数,就能轻松把C#里的路径值传递给HTML的文本框,下面给你详细拆解两种常用实现方案:
核心思路
在HTML页面中写一个接收路径并设置文本框的JS函数,然后在C#的按钮点击事件里,调用这个JS函数并传入txtPath的值即可,完全不影响你原本的拖拽填充逻辑。
具体实现方案(按控件类型分)
方案一:使用WebView2控件(推荐,基于现代Edge内核)
这是目前微软主推的网页嵌入控件,兼容性和功能都更优:
- HTML端准备接收函数
在你的HTML页面中添加这个JS函数,用来处理C#传来的路径:
// 接收C#传递的路径,设置到txtWebPath文本框 function setWebPath(path) { const targetInput = document.getElementById('txtWebPath'); if (targetInput) { targetInput.value = path; } }
- C#端按钮点击事件处理
在按钮的点击事件里,调用WebView2的方法执行上述JS函数:
private async void btnTransferPath_Click(object sender, EventArgs e) { // 先做基础校验:路径不为空,且WebView2已初始化完成 if (string.IsNullOrWhiteSpace(txtPath.Text) || webView21.CoreWebView2 == null) return; // 转义路径中的特殊字符,避免JS语法出错(比如Windows路径的反斜杠) string safePath = txtPath.Text.Replace("\\", "\\\\").Replace("'", "\\'"); // 调用网页中的JS函数,传入处理后的路径 await webView21.CoreWebView2.ExecuteScriptAsync($"setWebPath('{safePath}')"); }
小提示:记得要等WebView2的
CoreWebView2InitializationCompleted事件触发后再进行交互,避免空引用错误哦。
方案二:使用传统WebBrowser控件
如果你的项目还在使用老的WebBrowser控件,也可以这样实现:
- HTML端同样需要上述的
setWebPath函数 - C#端按钮点击事件处理
private void btnTransferPath_Click(object sender, EventArgs e) { // 基础校验:路径不为空,且网页已加载完成 if (string.IsNullOrWhiteSpace(txtPath.Text) || webBrowser1.Document == null) return; // 直接调用网页中的JS函数,传递路径参数 webBrowser1.Document.InvokeScript("setWebPath", new object[] { txtPath.Text }); }
关键注意事项
- 路径转义:Windows路径里的反斜杠
\在JS中是转义字符,必须替换为\\,否则会导致路径显示错误或者JS语法报错。 - 控件初始化:一定要确保WebView2/WebBrowser已经成功加载了目标HTML页面,不然找不到对应的JS函数或DOM元素。
- 权限问题:如果你的HTML是本地文件,WebView2默认允许本地交互,无需额外配置;要是涉及远程网页才需要处理跨域,但你的场景是本地网站,基本不会有问题。
这样操作下来,点击按钮就能把C#里选择的文件路径无缝传到网页的输入框里啦,和拖拽填充的效果完全一致~
内容的提问来源于stack exchange,提问作者kiunx3
相关产品推荐
相关产品推荐

