C# C MVC在SQL数据库表中搜索多列
以下是我现有的代码: MobileDatas/Index.cshtmlC# C MVC在SQL数据库表中搜索多列,c#,sql,asp.net-mvc,database,visual-studio-2013,C#,Sql,Asp.net Mvc,Database,Visual Studio 2013,以下是我现有的代码: MobileDatas/Index.cshtml @using (Html.BeginForm("Index", "MobileDatas", FormMethod.Get)) { <p> Manufacturer: @Html.DropDownList("searchGenre", "All") Filter By: @Html.TextBox("SearchString") <br /&g
@using (Html.BeginForm("Index", "MobileDatas", FormMethod.Get))
{
<p>
Manufacturer: @Html.DropDownList("searchGenre", "All")
Filter By: @Html.TextBox("SearchString") <br />
<input type="submit" value="Filter" />
</p>
}
大家好
我很难找到/想出解决我问题的办法。我正在尝试根据DropDownList中选择的列搜索我的表并返回结果
例如:制造商选择+索尼类型
结果应该显示:3索尼Z1橙色
目前,我的代码用于第一个if语句ifGenreLst.ContainsConvert.ToStringitem1
编辑:
发现上面的代码正在中断,因为这些项总是在GenreList中
如何返回所选项目以与项目1进行比较?在这里,我重新创建了您的视图并添加了foreach循环,以便打印输出
@model IEnumerable<stack.Controllers.Mobiles>
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<p>
Manufacturer: @Html.DropDownList("searchGenre", "All")
Filter By: @Html.TextBox("SearchString") <br />
<input type="submit" value="Filter" />
</p>
}
@if (Model != null || Model.Any())
{
foreach (var item in Model)
{
<p>@item.ID | @item.Manufacturer | @item.Model | @item.NetworkType </p>
}
}
你需要做什么
k => k.Manufacturer.Contains(searchString)
接下来,我把一切都保持原样,这样你就可以很容易地理解了。我刚刚增加了一个手机类,这样我可以重现你的情况
public class Mobiles
{
public int ID { get; set; }
public string Manufacturer { get; set; }
public string Model { get; set; }
public string NetworkType { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index(string searchGenre, string searchString)
{
string item1 = "Manufacturer";
string item2 = "Model";
string item3 = "NetworkType";
var GenreLst = new List<string> { item1, item2, item3, };
List<Mobiles> Mobs = new List<Mobiles>(){
new Mobiles() { ID = 1, Manufacturer = "Samsung", Model = "S4", NetworkType = "Orange" },
new Mobiles(){ ID = 2, Manufacturer = "Nokia", Model ="X1", NetworkType ="O2"},
new Mobiles(){ ID = 3, Manufacturer = "Sony", Model = "Z1", NetworkType = "Orange"}
};
var filterresults = from m in Mobs
select m;
ViewBag.searchGenre = new SelectList(GenreLst);
// ToLower for case
if (!String.IsNullOrEmpty(searchGenre))
{
switch (searchGenre)
{
case "Manufacturer":
filterresults = filterresults.Where(k => k.Manufacturer.Contains(searchString));
break;
case "Model":
filterresults = filterresults.Where(x => x.Model.Contains(searchString));
break;
case "NetworkType":
filterresults = filterresults.Where(v => v.NetworkType.Contains(searchString));
break;
default:
// Something defaulty if you want.
break;
}
}
return View("Index", filterresults);
}
}
最后一句话:
这一切都在我这边起作用。我建议使用ViewModel而不是ViewBag,这样生活会更轻松。然后可以将所有表单变量存储在其中
编辑:看这里
字符串item1=制造商;
字符串item2=模型;
string item3=网络类型
查看GenreLst中的网络类型如果将其作为NetworkType,则需要删除item3上的空格
我添加了一个交换机结构。。只是为了让它更具可读性和更好。您可以通过在顶部执行NullOrEmpty检查来节省大量代码,一次在您的操作中,searchGener应该包含用户在ddmenu中选择的任何内容,searchstring将是文本内容。你可以使用适当的变量。嗨,杰德尔谢谢你的回答,我试着添加了你建议的元素。我更正了filterresults=filterresults。其中k=>k.Manufacturer.containssearch字符串;我错过了一个好机会:我仍然无法按型号或网络显示进行搜索。我不确定您是否看到我对下面一行ifGenreLst.ContainsConvert.ToStringitem1的编辑,我认为问题是由GenreLst始终包含项引起的。但是我不知道如何解决这个问题,通常我会使用dropdownbox.selecteditem-type属性,但这在mvc中不是一个选项。有什么想法吗?@Baggerz我已经设法修复了它,我发布了更新的代码。我在底部详述了这些问题。我希望我能让你读得懂。但一切都是有效的。按钮行表示您没有使用SearchGene字符串来更改要搜索的内容。您只是在检查类型列表中是否包含item1,所以它总是检查模型,而不是其他字段。对不起,我忽略了这个。现在一切都对我有用了
filterresults = filterresults.Where(k=>Manufacturer.Contains(searchString));
k => k.Manufacturer.Contains(searchString)
public class Mobiles
{
public int ID { get; set; }
public string Manufacturer { get; set; }
public string Model { get; set; }
public string NetworkType { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index(string searchGenre, string searchString)
{
string item1 = "Manufacturer";
string item2 = "Model";
string item3 = "NetworkType";
var GenreLst = new List<string> { item1, item2, item3, };
List<Mobiles> Mobs = new List<Mobiles>(){
new Mobiles() { ID = 1, Manufacturer = "Samsung", Model = "S4", NetworkType = "Orange" },
new Mobiles(){ ID = 2, Manufacturer = "Nokia", Model ="X1", NetworkType ="O2"},
new Mobiles(){ ID = 3, Manufacturer = "Sony", Model = "Z1", NetworkType = "Orange"}
};
var filterresults = from m in Mobs
select m;
ViewBag.searchGenre = new SelectList(GenreLst);
// ToLower for case
if (!String.IsNullOrEmpty(searchGenre))
{
switch (searchGenre)
{
case "Manufacturer":
filterresults = filterresults.Where(k => k.Manufacturer.Contains(searchString));
break;
case "Model":
filterresults = filterresults.Where(x => x.Model.Contains(searchString));
break;
case "NetworkType":
filterresults = filterresults.Where(v => v.NetworkType.Contains(searchString));
break;
default:
// Something defaulty if you want.
break;
}
}
return View("Index", filterresults);
}
}