如果我有人可以帮助我如何在不使用实体框架的情况下在MVC 5中创建搜索页面,我将很高兴。如果用户输入产品名称并发布,则结果将显示在GridView
或InputBox
/ Label
中,以显示单行。我在后端使用C#和SQLServer。我只是MVC和C#的初学者。
我创建了一个控制器,如下所示;
{
connect pcon = new connect();
using (SqlConnection conn = new SqlConnection(pcon.CS))
{
try
{
//do something
pcon.cmd.CommandText = "SELECT * FROM tbproduct WHERE itemName=@name)";
pcon.cmd.Parameters.Add(new SqlParameter("@name", System.Data.SqlDbType.NVarChar, 50));
pcon.cmd.Parameters["@name"].Value = p.itemName;
pcon.cmd.Connection = conn;
conn.Open();
datagridview = pcon.cmd.ExecuteReader();
TempData["Success"] = "Record Added Sucessfully.";
return RedirectToAction("Index", "Product");
}
catch (Exception ex)
{
// throw ex;
// return RedirectToAction("Index", "Product");
return View("Error", new HandleErrorInfo(ex, "Product", "AddProduct"));
} // end of try-catch
} // end of using
} // end of spurious open bracket
有了这个,我不知道如何将它传递给视图以获得有意义的结果。 谢谢
答案 0 :(得分:0)
您可以从ExecuteReader
对象获取结果并将其传递给您的视图。我还建议对应用程序的体系结构进行一些更改。
首先,我将拥有一个ViewModel类,它捕获您希望传递给View的实体。类似的东西:
public class ProductViewModel
{
private ProductService _productService = new ProductService();
public IEnumerable<Product> GetProducts(string name)
{
return _productService.GetProducts(name);
}
}
我建议将ADO.NET代码(SqlConnection,SqlCommand)放入不同的层,即数据访问层或ProductService。
public class ProductService
{
public IEnumerable<Products> GetProducts(string name)
{
List<Products> products = new List<Products>();
using (SqlConnection conn = new SqlConnection(pcon.CS))
{
// Your code here
// Build up the products list from the SQL data reader
}
return products;
}
}
这将使您的控制器保持轻盈,不受业务逻辑的影响。
在您的控制器中,您将拥有:
public ActionResult GetProduct(string product)
{
ProductViewModel model = new ProductViewModel();
var products = model.GetProducts(product);
return View(products);
}
然后在你的View(.cshtml)文件中,你将遍历IEnumerable集合(你没有像网格视图那样的服务器端控件),因此你可以构建自己的。
@model IEnumerable<Product>
@foreach(var product in Model)
{
@product.name
}
作为附加说明,您可能需要考虑使用ORM,例如Entity Framework或nHibernate,它们可以为您提供所有令人振奋的功能。
答案 1 :(得分:0)
实际上你的控制器方法需要采取一些搜索参数来搜索并返回结果。
您还可以根据要在视图上显示的属性/字段创建视图模型,然后将结果映射到viewmodel并将其返回。
public ActionResult DoSearch(string searchString)
{
var movies = <get the movie list>;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
在视图中,您可以通过循环显示结果的模型来创建表。
@model IEnumerable<MvcMovie.Models.Movie>
@
if (Model.Count() == 0)
{
<tr>
<td colspan = "3" >Records not found</td>
</tr >
}
else
{
foreach(var item in Model)
{
<tr>
<td> @Html.DisplayFor(modelItem = > item.MovieName)</td>
<td> @Html.DisplayFor(modelItem => item.ReleaseDate)</td>
</tr >
}
}
要显示更具吸引力和用户友好的表格,您也可以使用IPagedList
。
查看http://www.asp.net/mvc/overview/getting-started/introduction/adding-search教程。