多个文本框搜索ASP.NET MVC

时间:2018-04-23 20:11:48

标签: asp.net-mvc entity-framework linq

我如何从多个文本框中查询我的localDB?我正在使用实体框架。

这是我的观点:

@*//implementing search options*@
<br />
<br />
<b> Search Option: </b>
<br />
<br />
<text> Last Name: </text> @Html.TextBox("lname")
<br />
<text> Alt Name: </text> @Html.TextBox("altname")
<br />
<text> First Name: </text> @Html.TextBox("fname")
<br />
<br />
<text> Year of Event: </text> @Html.TextBox("year")
<br />
<button type="button" onclick="location.href='@Url.Action("Search", 
"Home")'"> </button>

如您所见,我从家庭控制器调用“搜索”方法。我的问题是我应该将所有文本框值传递给方法,然后在那里构建DB的查询吗?或者我应该首先构造查询,然后只将查询传递给“搜索”方法?我想确保我使用的是最佳做法。

        public ActionResult Search(string queryString)
    {
        return View();
    }

这是我的搜索Action方法,目前我已将它设置为我想将查询字符串传递给它,但如果我需要编辑它,并在实际方法本身构造整个查询,我可以去领先并做出改变。

谢谢,

HR

1 个答案:

答案 0 :(得分:1)

我会在您的视图中构建一个带有已命名条目的视图模型。我也会改变你的变量名并使它们成为驼峰式的。

public class SearchParams {
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public string AltName { get; set; }
     public string Year { get; set; }
}

从那里,您可以更改视图以在Razor元素中使用模型。因此@Html.TextBox("lname")变为@Html.TextBoxFor(m => m.LastName)。这样,您的输入表单就会与您的视图模型紧密绑定。您还需要在剃刀表单中包装输入和提交按钮(您的表单),如下所示:@using (Html.BeginForm("Search", "Home"))

从那里你必须修改你的控制器。 public ActionResult Search(string queryString)现在变为public ActionResult Search(searchParams searchParam),您的模型数据可以通过searchParams.LastName进行访问。

public ActionResult Search(searchParams searchParam) {
   var lastName = searchParam.LastName;
}

从这里开始,我将继续修改您的视图以利用更多MVC功能。

  • 如果您在视图模型上添加了DisplayName元属性,则可以将<text> Last Name: </text>更改为@Html.DisplayFor(m => m.LastName)

  • 您的提交按钮可以像<button type="submit">Save</button>

  • 一样简单

你的最终模特应该是这样的:

public class SearchParams {
     [DisplayName("First Name")]
     public string FirstName { get; set; }

     [DisplayName("Last Name")]
     public string LastName { get; set; }

     [DisplayName("Alt Name")]
     public string AltName { get; set; }

     [DisplayName("Year")]
     public string Year { get; set; }
}

然后粗略看一下视图:

@using (Html.BeginForm("Search", "Home")) 
{
    @Html.LabelFor(m => m.FirstName)
    @Html.TextBoxFor(m => m.FirstName)

    @Html.LabelFor(m => m.LastName)
    @Html.TextBoxFor(m => m.LastName)

    @Html.LabelFor(m => m.AltName)
    @Html.TextBoxFor(m => m.AltName)

    @Html.LabelFor(m => m.Year)
    @Html.TextBoxFor(m => m.Year)

    <button type="submit">Search</button>
}

您需要添加一些HTML / CSS来清理它,但这是解决方案的MVC部分。

我的建议是了解Razor控件以及如何使用它们。他们将使这一切变得非常简单。