我如何从多个文本框中查询我的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
答案 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控件以及如何使用它们。他们将使这一切变得非常简单。