如何将信息作为参数从视图传递到控制器

时间:2019-07-31 12:25:29

标签: c# asp.net-mvc

我有一个表单和两个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>

我的控制器:

 public ActionResult Search(string catNo = "10004361")
        {
            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 = '" + catNo + "'", 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);
        }

代码可以正确编译,并且除了Model.Number之外,代码的所有其他方面都可以正常工作。Number仅将Null传递给脚本。

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

2 个答案:

答案 0 :(得分:0)

您需要使用@Html.ActionLink助手而不是按钮来实现目标,例如:

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

答案 1 :(得分:0)

我会这样使用POST操作:

  1. 您的视图:

    @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>
    

    }

  2. 您的模型:

    public class YOUR_MODEL
    {
        public string Number {get;set;}
    }
    
  3. 您的控制器

    [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);
    }