【问题标题】:ASP.net MVC inputbox [duplicate]ASP.net MVC 输入框 [重复]
【发布时间】:2017-02-21 14:47:22
【问题描述】:

大家好,我遇到了一个问题,我在 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>

搜索.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 非常缺乏经验,所以任何帮助都会非常好。

编辑:忘记提及实际问题,我现在一直收到此错误。

传入字典的模型项是类型 'System.Data.Entity.Infrastructure.DbQuery`1[webApp.Models.Table]', 但是这本字典需要一个类型的模型项 'webApp.Models.Table'。

【问题讨论】:

  • 到底出了什么问题?你试过调试它吗?粗略一看,webApp.Models.Table.email 的名字似乎与 emailString 不匹配。
  • 传入字典的模型项的类型是'System.Data.Entity.Infrastructure.DbQuery`1[webApp.Models.Table]',但是这个字典需要一个'webApp类型的模型项.Models.Table'。我不断收到此错误
  • 您的查询生成Table 的集合,您将其传递给一个需要单个Table 的视图 - 不知道您想要什么,但它要么return View(search.FirstOrDefaut()); 显示一个,要么更改视图到@model IEnumerable&lt;Table&gt; 并使用循环显示每个对象的属性。

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


【解决方案1】:

您发布的输入字段的名称似乎是email,而您的搜索操作中的参数是emailString

尝试将 emailString 更改为电子邮件,我认为它会起作用。此外,请考虑使用 GET 而不是 POST,除非您出于某种原因试图将其从查询字符串中隐藏或不允许直接访问。

【讨论】:

    【解决方案2】:

    真正的问题在于您认为 Table 类模型正在传递,而您在字符串 In Controller 操作中捕获它

    将您的操作代码更改为:-

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

    【讨论】:

      【解决方案3】:

      您正在向视图传递查询。使用 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);
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-03
        • 2010-09-14
        • 1970-01-01
        • 2011-01-05
        相关资源
        最近更新 更多