2014-12-02 95 views
0

我有兩個下拉列表和兩個文本框如何從搜索文本框清晰的文本搜索完成後在MVC

Search By: ByHtml.DropDownList("Search1", "Please Select...") 
     Html.TextBox("searchString1")  

Search By: Html.DropDownList("Search2", "Please Select...") 
     @Html.TextBox("searchString2") 

     <input type="submit" value="Filter" /> 

當我把我從哪個DDL和類型文本到文本框中選擇,打我過濾後搜索返回,但是在搜索之後文本保留在文本框中,是否有一種方法可以在搜索之後清除它,以便文本框再次爲空?我試過

ModelState.Remove(""); 

但它沒有工作。

從我的控制器代碼的樣品是

public class MainController : Controller 
{ 
    private DBEntities db = new DBEntities(); 

    // GET: /Main/ 
    public ActionResult Index(string searchString1, string searchString2, string Search1, string Search2) 
    { 
     //Create a Dropdown list 
     var SearchOptionList = new List<string>(); 
     SearchOptionList.Add("LandLord"); 
     SearchOptionList.Add("Postcode"); 
     SearchOptionList.Add("Street Address"); 
     ViewBag.Search1 = new SelectList(SearchOptionList); 
     ViewBag.Search2 = new SelectList(SearchOptionList); 

var mylist = from m in "mydatabase" select m; 

//This statement runs if the user selects a parameter from Search2 and leaves Search1 empty 
     if (String.IsNullOrEmpty(Search1) && !String.IsNullOrEmpty(Search2)) 
     { 
      if (Search2 == "Postcode") 
      { 
       mylist = mylist.Where(s => s.Postcode.Contains(searchString2)); 
      } 
      if (Search2 == "LandLord") 
      { 
       mylist = mylist.Where(s => s.Name.Contains(searchString2)); 
      } 
      if (Search2 == "Street Address") 
      { 
       mylist = mylist.Where(s => s.StreetAddress.Contains(searchString2)); 
      } 
     } 

    return View(mylist.ToList()); 

}

+0

你可以做你控制器,分享你的控制器代碼以及回答 – 2014-12-02 16:24:08

+0

我已經用我的控制器中的一些示例代碼更新了我的問題 – Scanner 2014-12-02 16:27:39

+0

你的模特班是什麼?通常情況下,您應該清除模型類中傳回您的視圖的對象中的值。 – Floremin 2014-12-02 16:46:31

回答

0

你應該具有包含屬性searchString1searchString2和選擇列表

public class SearchVM 
{ 
    public string searchString1 { get; set; } 
    public string searchString2 { get; set; } 
    public SelectList SearchList1 { get; set; } 
    public SelectList SearchList2 { get; set; } 
} 

控制器

public ActionResult Search() 
{ 
    SearchVM model = new SearchVM(); 
    model.SearchList1 = new SelctList(...); 
    model.SearchList2 = new SelctList(...); 
    return View(model); 
} 
視圖模型

查看

@model SearchVM 
@using(Html.BeginForm()) 
{ 
    .... 
    @Html.DropDownListFor(m => m.searchString1, Model.SearchList1, "--Please select--") 
    @Html.DropDownListFor(m => m.searchString2, Model.SearchList2, "--Please select--") 
    .... 
} 

[HttpPost] 
public ActionResult Search(SearchVM model) 
{ 
    // to clear all modelstate and reset values 
    ModelState.Clear(); 
    model.searchString1 = null; 
    model.searchString2 = null; 
    // or to clear just one property and reset it 
    ModelState.Remove("searchString1"); 
    model.searchString1 = null; 
    // repopulate select lists if your returning the view 
    return View(model); 
} 
+0

感謝您的回答Stephen,我已經更新了我的帖子,以顯示我的課程,我嘗試將您的更改修改爲我的,但由於我已在查看頁面中獲得了@model,導致出現一些錯誤 – Scanner 2014-12-04 08:43:46

+0

視圖模型可以包含這些和你的其他屬性,但很難理解你在這裏做什麼。你是否想要搜索控件和返回的過濾列表(在這種情況下,你應該使用ajax),還是想要選擇搜索參數並重定向到顯示過濾列表的另一個視圖(沒有搜索控件)? – 2014-12-04 09:11:40

+0

當我從下拉列表中選擇說郵編並鍵入BT1並點擊搜索時,它將返回所有相關的郵編,但是BT1保留在搜索框內,我希望只有在搜索返回郵編後才能清除此郵編 – Scanner 2014-12-04 10:03:31

0

在我public ActionResult Index方法的結束,但return View()之前我把下面的代碼工作完全

ModelState.Remove("searchString1"); 
     ModelState.Remove("searchString2"); 
     ModelState.Remove("Search1"); 
     ModelState.Remove("Search2");