【问题标题】:Detect copy/paste in HTML form under .NET CORE MVC 2.1在 .NET CORE MVC 2.1 下检测 HTML 表单中的复制/粘贴
【发布时间】:2018-12-12 09:25:53
【问题描述】:

我正在从事一个在我到达公司时已经存在的项目。

用户需要将 Excel 中的多个 ISBN 编号粘贴到我的索引页面 (HTML) 的搜索字段中。他们通过从 Excel 中选择许多 ISBN 并将其复制/粘贴到搜索字段中来做到这一点。问题是有时 ISBN 格式不正确,中间可能有一个字母或特殊符号(不要问我为什么,不知道)。

字符串类似于这样:

3356565663541 3356565663541 3356565663541 3356B565663541 3356565663541A

我的索引页中输入表单的代码是:

<div class="col-lg-4">
  <div class="form-group">
    <label>ISBN</label>
    <input asp-for="Advanced_ISBN" id="ISBN" type="text" placeholder="" class="form-control">
  </div>
</div>

我需要一种方法来分析粘贴到文本框中的内容并向用户发出错误信号。

如果可能,我想在 C# 中执行此操作,但我不知道如何:

  • 使用 ctr-v 或右键单击,过去检测“粘贴到文本框”;

  • 获取字符串进行分析;

  • 在新的临时窗口中显示它,并在可能包含错误的行上突出显示颜色。

如果一切正确或检测到 NOK 行,用户会按 OK。

【问题讨论】:

  • 听起来你想使用客户端检测,我建议你先阅读这个例子:stackoverflow.com/questions/2903991/…。请注意,服务器端代码不知道文本框中包含的文本是否是逐字复制和粘贴的结果。

标签: html asp.net-core .net-core asp.net-core-mvc


【解决方案1】:

使用input 事件处理程序。它会在输入和粘贴时触发

jQuery:

$("ISBN").on("input",function() {}); 

纯 JS:

document.getElementById("ISBN").addEventListener("input",function() {}); 

function isValidISBN (isbn) { // from https://neilang.com/articles/how-to-check-if-an-isbn-is-valid-in-javascript/
  isbn = isbn.replace(/[^\dX]/gi, '');
  if(isbn.length != 10){
    return false;
  }
  var chars = isbn.split('');
  if(chars[9].toUpperCase() == 'X'){
    chars[9] = 10;
  }
  var sum = 0;
  for (var i = 0; i < chars.length; i++) {
    sum += ((10-i) * parseInt(chars[i]));
  };
  return ((sum % 11) == 0);
}

document.getElementById("ISBN").addEventListener("input",function() {
  this.value.split(" ").forEach(function(val) {
    if(val.trim()) console.log(val,isValidISBN(val));
  });
});
A valid ISBN would be 0-85131-041-9

<div class="col-lg-4">
  <div class="form-group">
    <label>ISBN</label>
    <input asp-for="Advanced_ISBN" id="ISBN" type="text" placeholder="" class="form-control">
  </div>
</div>

如果您坚持让服务器处理它,请执行此操作(此处为 jQuery):

$("#ISBN").on("input",function() {
  $.post("yourcsharpprocess",{ data : this.value },function(data) {
    $("#result").html(data);
  });
});

【讨论】:

  • 我不需要标准代码,我需要将字符串发送到 C# 并将其加载到窗口中。如何从 HTML 调用 C# 方法并将字符串发送给它?谢谢。
  • @RuiRuivo:根据你的问题,你想要实现的正是这个答案告诉你的。您无需将其发送到服务器,只需验证 ISBN 是否具有有效语法(它甚至会验证校验和字母,这应该可以捕获大多数交换两个数字的错误)
  • 是的,为什么要等待往返 - C# 无法检测到粘贴 - 我已经更新了答案
  • 好的,我正在尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2015-11-05
  • 2013-06-30
相关资源
最近更新 更多