2017-02-21 151 views
-1

嘿傢伙我卡在一個問題上,我找到了解決方案之前搜索網站,但我似乎無法找到我的代碼中的問題。所以我希望有更多經驗的人可以幫助我。ASP.net MVC輸入框

我想把一些東西放到主index.cshtml的輸入框中,然後發送它來搜索這個輸入。

首頁/ 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所以任何幫助將是非常好的。

編輯:忘了提到的實際問題,我不斷收到此錯誤。

傳遞到詞典中的模型產品 類型的「System.Data.Entity.Infrastructure.DbQuery`1 [webApp.Models.Table]」, 但本詞典需要 類型的模型項' webApp.Models.Table」。

+0

究竟是什麼錯誤?你嘗試過調試嗎?粗略看來,它看起來像'webApp.Models.Table.email'的名稱與'emailString'不匹配。 –

+0

傳入字典的模型項目類型爲'System.Data.Entity.Infrastructure.DbQuery'1 [webApp.Models.Table]',但該字典需要類型爲'webApp.Models.Table'的模型項。我一直得到這個錯誤 – Tourna

+1

你的查詢生成一個'Table'的集合,你傳遞給一個需要單個'Table'的視圖 - 不知道你想要什麼,但是它的返回View(search.FirstOrDefaut());'to顯示一個,或將視圖更改爲'@model IEnumerable

'並使用循環顯示每個對象的屬性。 –

回答

0

看來,你張貼的輸入字段的名稱是電子郵件,而在你的搜索行動的參數是都是EmailString

嘗試更改emailString到電子郵件,我認爲它會工作。此外,請考慮GET而不是POST,除非您由於某種原因試圖將其從查詢字符串中隱藏或不允許直接訪問。

0

真正的問題是,從您的視圖表類模型在流逝,你在字符串捕獲它在控制器動作

改變你的操作代碼到這一點: -

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