C# 如何将视图中的信息作为参数传递给控制器

C# 如何将视图中的信息作为参数传递给控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个表单和两个SQL数据库。表单是将信息提交到数据库1,但当用户在第一个字段中输入信息时,我需要它扫描数据库2以获取此数据并从中填充描述 我目前有一个按钮,它将在控制器中运行脚本来检索此数据。但是,我不知道如何将第一个字段作为参数传递给按钮onclick,因此它将使用它来搜索数据库 所有东西都在控制器中工作,但我不知道如何获取EditorFor文本字段中键入的信息,并将其作为参数提交给按钮。我曾尝试使用“模型”来实现这一点,但我对其工作原理的理解有限 我的看法是: <div class

我有一个表单和两个SQL数据库。表单是将信息提交到数据库1,但当用户在第一个字段中输入信息时,我需要它扫描数据库2以获取此数据并从中填充描述

我目前有一个按钮,它将在控制器中运行脚本来检索此数据。但是,我不知道如何将第一个字段作为参数传递给按钮onclick,因此它将使用它来搜索数据库

所有东西都在控制器中工作,但我不知道如何获取EditorFor文本字段中键入的信息,并将其作为参数提交给按钮。我曾尝试使用“模型”来实现这一点,但我对其工作原理的理解有限

我的看法是:

<div class="form-group">
        @Html.LabelFor(model => model.Number, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-4">
            @Html.EditorFor(model => model.Number, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Number, "", new { @class = "text-danger" })
        </div>
        <div class="col-md-1">
            <input type="button" value="Search" class="btn btn-default" onclick="location.href='@Url.Action("Search", "Catalog", new { Number = Model.Number })'" ; />
        </div>
    </div>
代码编译正确,除模型外,代码的所有方面都正常工作。Number只会将Null传递到脚本中


我想从EditorFor字段中的model.Number获取信息,并在语句中使用它。

您需要使用
@Html.ActionLink
帮助程序而不是按钮来实现目标,如下所示:

@Html.ActionLink("Search", "Search", "Catalog", new { catNo = Model.Number }, new { @class="btn btn-default" })

您需要使用
@Html.ActionLink
帮助程序而不是按钮来实现目标,如下所示:

@Html.ActionLink("Search", "Search", "Catalog", new { catNo = Model.Number }, new { @class="btn btn-default" })

我会像这样使用POST操作:

  • 你的看法:

    @model YOUR_MODEL    
    @using (Html.BeginForm("Search", "Home", FormMethod.Post))
    {
    <div class="form-group">
        @Html.LabelFor(model => model.Number, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-4">
        @Html.EditorFor(model => model.Number, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Number, "", new { @class = "text-danger" })
    </div>
    <div class="col-md-1">
        <input type="button" value="Search" class="btn btn-default"/>
    </div>
    
  • 你的控制器

    [HttpPost]
    public ActionResult Search(YOUR_MODEL model)
    {
        IFS_Catalog_Products DatabaseScanner = new IFS_Catalog_Products();
        string catDesc = "";
    
        if (ModelState.IsValid)
        {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = @"CONNECTION STRING";
            con.Open();
    
            SqlCommand cmd = new SqlCommand("SELECT DESCRIPTION FROM TABLE WHERE NUMBER = '" + model.Number+ "'", con);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                catDesc = dr.GetString(0);
                //break;
            }
                con.Close();
        }
        DatabaseScanner.IFS_Catalog_Desc = catDesc;
        DatabaseScanner.IFS_Catalog_No = catNo;
    
        return View("Create", DatabaseScanner);
    }
    

  • 我会像这样使用POST操作:

  • 你的看法:

    @model YOUR_MODEL    
    @using (Html.BeginForm("Search", "Home", FormMethod.Post))
    {
    <div class="form-group">
        @Html.LabelFor(model => model.Number, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-4">
        @Html.EditorFor(model => model.Number, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Number, "", new { @class = "text-danger" })
    </div>
    <div class="col-md-1">
        <input type="button" value="Search" class="btn btn-default"/>
    </div>
    
  • 你的控制器

    [HttpPost]
    public ActionResult Search(YOUR_MODEL model)
    {
        IFS_Catalog_Products DatabaseScanner = new IFS_Catalog_Products();
        string catDesc = "";
    
        if (ModelState.IsValid)
        {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = @"CONNECTION STRING";
            con.Open();
    
            SqlCommand cmd = new SqlCommand("SELECT DESCRIPTION FROM TABLE WHERE NUMBER = '" + model.Number+ "'", con);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                catDesc = dr.GetString(0);
                //break;
            }
                con.Close();
        }
        DatabaseScanner.IFS_Catalog_Desc = catDesc;
        DatabaseScanner.IFS_Catalog_No = catNo;
    
        return View("Create", DatabaseScanner);
    }
    

  • 您需要使用POST controller方法并让binder自动绑定您的属性检查此链接:如果我在控制器中附加[HttpPost]和绑定[()],我刚刚收到HTTP404错误您需要使用POST controller方法并让binder自动绑定您的属性检查此链接:如果我附加[HttpPost]和绑定[()]在控制器内,我刚刚收到HTTP404错误。我已将我的按钮更改为您提供的语法,但我仍然有相同的问题,参数将空值传递给控制器:(你能在浏览器中检查上面代码生成的HTML吗?它应该包含
    catNo
    作为
    QueryString
    参数作为:
    /Catalog/Search?catNo=123
    。真的很抱歉,我不太熟悉使用这些函数,我不知道这意味着什么,也不知道怎么做:l EDIT:我在U结尾没有看到任何查询字符串RL运行操作时。如果您使用的是
    Google Chrome
    ,您可以检查并查看
    HTML
    正在生成什么。在我的情况下,它正在生成:
    。请告诉我您得到了什么。我已将按钮更改为您提供的语法,但仍然存在相同的问题,参数传递了一个空值向控制器发送:(你能在浏览器中检查上面代码生成的HTML吗?它应该包含
    catNo
    作为
    QueryString
    参数作为:
    /Catalog/Search?catNo=123
    。真的很抱歉,我不太熟悉使用这些函数,我不知道这意味着什么,也不知道怎么做:l EDIT:我在U结尾没有看到任何查询字符串RL运行操作时。如果您使用的是
    Google Chrome
    ,您可以检查并查看
    HTML
    正在生成什么。在我的情况下,它正在生成:
    。请告诉我您得到了什么。