Asp.net mvc 多文本框搜索ASP.NET MVC

Asp.net mvc 多文本框搜索ASP.NET MVC,asp.net-mvc,entity-framework,linq,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>

我如何从多个文本框中获取值来查询我的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>
这是我的搜索操作方法,目前我已经将其设置为只想将查询字符串传递给它,但是如果我需要编辑它,并在实际方法本身中构造整个查询,我可以继续并进行更改

谢谢


HR

当您在视图中构建时,我将使用精确命名的条目创建视图模型。我还将更改您的变量名,并使它们成为驼峰大小写

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.TextBoxlname变成@Html.TextBoxForm=>m.LastName。这样,您的输入表单将紧密绑定到视图模型。您还需要将表单中的输入和提交按钮包装在razor表单中,如下所示:@using Html.BeginFormSearch,Home

从那里你必须修改你的控制器。public ActionResult Searchstring queryString现在变成public ActionResult searchParams searchParam,您的模型数据可以作为searchParams.LastName访问

public ActionResult Search(searchParams searchParam) {
   var lastName = searchParam.LastName;
}
从这里开始,我将继续修改您的视图,以利用更多MVC功能

如果在视图模型上添加DisplayName元属性,则可以将LastName:更改为@Html.DisplayForm=>m.LastName

您的提交按钮可以像保存一样简单

您的最终模型应如下所示:

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部分


我给你的建议是了解剃须刀控制装置以及如何使用它们。他们将使这一切变得非常简单。

我将构建一个viewmodel,将其传递给您的Search GET,然后添加一个表单并将其发回。请参阅。别忘了,您需要更改代码以使用实际表单,并更改按钮以提交。或者,使用某种javascript来提交它。谢谢@eric,我将尝试实现上面显示的功能。如果有什么我相信这将给我一个坚实的开始基础能够完成我想要的。谢谢Erick,我没有看到他没有实现HTML。BeginForm@EricPackwood你对在我的控制器中使用JsonResult而不是ActionResult有什么意见吗?@raha只有在你想使用结果中的数据时,我才会这样做作为纯JavaScript。另外,您可以使用Razor控件再次显示结果数据。所以,如果你想保持它的紧凑性和MVC,那么就使用Razor控件,但是如果你想使用一种更具JavaScript风格的Angular/React/Knockout方法,那么就可以使用JSON。如果您想混合使用这两种方法,可以输入razor代码将模型转换为JSON对象。请记住,您可以在视图中混合使用JavaScript和Razor模型。
@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>
}