嘿伙计们我遇到了一个问题,我在qnd找到解决方案之前搜索了网站,但我似乎无法在我的代码中找到问题。所以我希望有经验的人可以帮助我。
我想将一些内容放入主index.cshtml的输入框中,然后发送它以搜索此输入。
从搜索开始的Home / index.cshtml是什么不起作用。
@model webApp.Models.Table
@{
ViewBag.Title = "Home Page";
}
<div class="jumbotron">
<h1>WebApp</h1>
</div>
<div class="row">
<div class="col-md-4">
<h2>Index</h2>
<p>
@Html.ActionLink("Database lisst", "Index", "Tables")<br/>
</p>
</div>
<div class="col-md-4">
<h2>Search</h2>
<p>
@using (Html.BeginForm("Search", "Tables", FormMethod.Post))
{
<p>
Email: @Html.TextBoxFor(model => model.email) <br />
<input type="submit" value="Filter" />
</p>
}
</p>
</div>
Search.cshtml
@model webApp.Models.Table
@{
ViewBag.Title = "Search";
}
<h2>Search</h2>
<div>
<h4>Table</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.email)
</dt>
<dd>
@Html.DisplayFor(model => model.email)
</dd>
<dt>
@Html.DisplayNameFor(model => model.code)
</dt>
<dd>
@Html.DisplayFor(model => model.code)
</dd>
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.Id }) |
@Html.ActionLink("Back to List", "Index")
</p>
控制器
public ActionResult Search(string emailString)
{
var search = from m in db.Table select m;
if (!String.IsNullOrEmpty(emailString))
{
search = search.Where(s => s.email.Contains(emailString));
}
return View(search);
}
我对mvc和asp.net非常缺乏经验,所以任何帮助都会非常好。
编辑:忘了提到实际问题,我现在一直收到这个错误。
传递到字典中的模型项是类型的 &#39; System.Data.Entity.Infrastructure.DbQuery`1 [webApp.Models.Table]&#39 ;, 但是这个字典需要一个类型的模型项 &#39; webApp.Models.Table&#39;
答案 0 :(得分:0)
您发布的输入字段的名称似乎是电子邮件,而搜索操作中的参数似乎是 emailString 。
尝试将emailString更改为电子邮件,我认为它会起作用。另外,考虑GET而不是POST,除非您因某种原因试图将其隐藏在查询字符串中或不允许直接访问。
答案 1 :(得分:0)
真正的问题来自您的视图Table类模型正在传递,您正在使用字符串In Controller action
捕获它将您的操作代码更改为: -
public ActionResult Search(Table model)
{
var search = from m in db.Table select m;
if (!String.IsNullOrEmpty(model.email))
{
search = search.Where(s => s.email.Contains(model.email));
}
return View(search);
}
答案 2 :(得分:0)
您正在向视图传递查询。使用FirstOrDefault,您可以执行查询并获得单个结果(没有结果返回null)。此外,您的表单将模型传递给控制器。添加.ToLower()以避免区分大小写。
public ActionResult Search([Bind("email")] Table table)
{
var search = db.Table.Where(s => s.email.ToLower()
.Contains(table.email.ToLower())
.FirstorDefault());
//do something if search = null
return View(search);
}