我正在开发一个项目,其中需要一个搜索框来查找包含输入字符串的记录,然后将它们显示在页面上。理想情况下,要求是在键入字符串时过滤掉结果,但如果这是不可能的,只需找到最终结果的搜索按钮即可。我对ASP.NET Core知之甚少,所以我不知道如何做到这一点。 起初,我想我可以通过获取输入值并将其放入sql语句然后显示它来实现这一点,例如:
(上下文:使用Visual Studios 2017企业,在.cshtml文件中)
<input id="pleaseWork" type="text" />
<button onclick="@workAlready()">search</button>
@{
public void workAlready(){
var inpString = document.getElementByID("pleaseWork").value
string sql = "SELECT * FROM Table WHERE (ID = '" + inpString + "')";
SqlConnection connect = new SqlConnection(Connection);
SqlCommand command = new SqlCommand(sql, connect);
conn.Open();
SqlDataReader nwReader = command.ExecuteReader();
/*...Display results*/
}
}
这样可以正常工作 - (好的是相对于问题,无视错误的编码实践和丑陋的代码) - 如果我能够这样做并将输入字段值转换为ac#变量,但两种类型的变量都没有彼此玩得很好,我找不到任何办法。我搜索了很多地方,我听到很多关于使用控制器等的讨论,但由于我对.NET Core(以及MVC)的了解有限,我无法让它工作。所以我想我的问题是想知道它是否有可能这样做?我可以将输入值作为c#变量吗?任何帮助将不胜感激!
答案 0 :(得分:0)
我不建议学习MVC框架,也不建议学习新语言。您现在正在尝试的是在已处理的页面中调用预处理的方法(提示:它是不可能的)。您需要做的是在服务器端代码库中定义控制器和操作(即控制器层,MVC中的C)。
你可以使用前端的任何语言来调用这个控制器(我建议你只使用jQuery,因为你对这一切都很新)。 JQuery是javascript,因此您可以通过单击输入字段来实际调用您在jQuery脚本中定义的函数。
做两件事,学习如何向服务器发送AJAX请求(POST)。其次,学习如何在代码库中正确创建一个简单的控制器 - 动作。
一旦拥有了这两套,您就可以在视图和控制器之间进行通信。然后,您可以开始考虑SQL,但不久之后。
答案 1 :(得分:0)
通过AJAX将数据传递给控制器。
您的控制器可能如下所示:
public class HomeController : Controller
{
[HttpPost]
public String HandleValue([FromBody] string inpString)
{
string sql = "SELECT * FROM Table WHERE (ID = '" + inpString + "')";
SqlConnection connect = new SqlConnection(Connection);
SqlCommand command = new SqlCommand(sql, connect);
conn.Open();
SqlDataReader nwReader = command.ExecuteReader();
// format and return the results
}
}
然后从JavaScript发布数据到控制器:
var inpString = document.getElementByID("pleaseWork").value;
var options = {
method: 'POST',
body: inpString
}
fetch('/Home/HandleValue', options).then(function(response) {
return response.json();
}).then(function(results) {
// display results, it contains the data you returned from the controller as json.
});
或者你可以使用好的Forms。
答案 2 :(得分:0)
If I'm understanding you correctly I just had this same issue. What I essentially did is the following:
<div>
@using (Html.BeginForm()) {
<input name="pleaseWork" type="text" />
<button asp-page-handler="DoWork">search</button>
}
</div>
Then in your [PageModel].cshtml.cs file...
public void OnPostDoWork() {
var inpString = HttpContext.Request.Form["pleaseWork"];
string sql = "SELECT * FROM Table WHERE (ID = '" + inpString + "')";
SqlConnection connect = new SqlConnection(Connection);
SqlCommand command = new SqlCommand(sql, connect);
conn.Open();
SqlDataReader nwReader = command.ExecuteReader();
/*...Display results*/
}
Note: I'm currently using asp .net core 2.1