2010-11-03 167 views
2

我在HomeController.cs下面的代碼ASP.NET MVC C#搜索幫助

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 
using MyApplication.Models; 

namespace MyApplication.Controllers 
{ 
    public class HomeController : Controller 
    { 
     private NewsDBEntities _db = new NewsDBEntities(); 

     // 
     // GET: /Home/ 

     public ActionResult Index() 
     { 

      return View(_db.ArticleSet.ToList()); 

     } 

     // 
     // GET: /Home/Details/5 

     public ActionResult Details(int id) 
     { 
      //return View(); 

      var ArticleToView = (from m in _db.ArticleSet 

           where m.storyId == id 

           select m).First(); 

      return View(ArticleToView); 
     } 



     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Index(String query) 
     { 

      var ArticleQuery = (from m in _db.ArticleSet 

           where m.headline.Contains(query) 

           select m).First(); 

      return View(ArticleQuery); 

      //return RedirectToAction("Search"); 

     } 

    } 
} 

在我的意見下首頁/的Index.aspx文件夾我有一個簡單的搜索,像這樣:

<% using (Html.BeginForm()) {%> 

     <fieldset> 
      <legend>Search</legend> 
      <p> 
       <label for="query">Keywords:</label> 
       <%= Html.TextBox("query") %> 
      </p> 
      <p> 
       <input type="submit" value="Search" /> 
      </p> 
     </fieldset> 

    <% } %> 

這個想法是,當用戶提交這個表單時,將使用查詢文本框的內容,然後根據來自我的數據庫的文章的標題進行檢查,並且索引視圖將不會顯示所有文章將只顯示那些匹配用戶輸入的查詢。

當我提交我得到以下錯誤的形式:

The model item passed into the dictionary is of type 'MyApplication.Models.Article' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyApplication.Models.Article]'. 

我有什麼錯在這裏做什麼?從我可以告訴代碼是好的。

回答

1

您傳遞的視圖是'System.Collections.Generic.IEnumerable1[MyApplication.Models.Article]'的強類型視圖。請更改視圖的類型,或將IEnumerable文章集合傳遞給視圖。

1

您的看法強烈地鍵入到MyApplication.Models.Article的集合。您無法將單個MyApplication.Models.Article傳遞到視圖中。

2

看來,在你的視圖中你有Inherits="System.Web.Mvc.ViewPage<IEnumerable<Article>>",但你只能通過一個。將IEnumerable替換爲一個,或者刪除.First()

+0

真棒很好的固定。我還添加了一些其他的問題。謝謝。 – Cameron 2010-11-03 15:33:20

1

How can I show a count of how many articles are returned after the search and what the query was. And also hide and show it based on whether or not the user did a search.

我建議使用自定義視圖模型來提供查看呈現給用戶的所有必要信息。

public class SearchResultViewModel { 
    public IEnumerable<MyApplication.Models.Article> Articles { get; set; } 
    public string SearchText { get; set; } 
} 

在您的控制器中,您將創建此模型的新實例,並相應地填充它。

然後,你會強烈鍵入您的視圖SearchResultViewModel,並用它在需要的地方:

  1. 結果字數:<%: Model.Articles.Count() %>
  2. 搜索文本:<%: Model.SearchText %>
+0

您能否詳細解釋一下,因爲我沒有完全理解使用自定義視圖模型(您的意思只是自定義視圖?)以及使用模型的實例。謝謝 – Cameron 2010-11-03 16:08:02

+0

@Cameron - 看看這篇文章,看看它是否覆蓋它:http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-視圖models.aspx – dotariel 2010-11-03 17:53:16