2017-02-21 16 views
-1

私は問題に悩まされていて、qndが解決策を見つける前にサイトを検索しましたが、私のコードで問題を見つけることができません。だからもっと経験豊富な人が私をここで助けてくれることを願っていました。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'のコレクションを生成します。あなたが何を望んでいるのかは分かりませんが、 'return View(search.FirstOrDefaut());' toビューを '@model IEnumerable

'に変更し、ループを使用して各オブジェクトのプロパティを表示します。 –

答えて

0

あなたの検索アクションでパラメータがemailStringがある一方で、あなたが投稿している入力フィールドの名前は、メールようです。

emailStringを電子メールに変更してみてください。うまくいくと思います。また、POSTの代わりにGETを検討してください。何らかの理由でクエリ文字列からそれを隠そうとしないか、直接アクセスを許可しない場合を除きます。

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