ASP.net MVC输入框

时间:2017-02-21 14:47:23

标签: asp.net asp.net-mvc search inputbox

嘿伙计们我遇到了一个问题,我在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;

3 个答案:

答案 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);
}