ASP.NET Core从带有c#变量的输入框中获取值

时间:2017-07-28 12:44:33

标签: c# asp.net-core-mvc

我正在开发一个项目,其中需要一个搜索框来查找包含输入字符串的记录,然后将它们显示在页面上。理想情况下,要求是在键入字符串时过滤掉结果,但如果这是不可能的,只需找到最终结果的搜索按钮即可。我对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#变量吗?任何帮助将不胜感激!

3 个答案:

答案 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