2013-02-07 39 views
0

我想創建一個搜索表單,基於服務器名稱或打印機名稱進行搜索。這是從我的控制器中的片段:試圖創建一個下拉列表和文本框,設置列表項作爲數據和文本框作爲值 - asp.net mvc 4

List<SelectListItem> items = new List<SelectListItem>(); 
     items.Add(new SelectListItem { Text = "Server Name", Value = "ServerName" }); 
     items.Add(new SelectListItem { Text = "Printer Name", Value = "PrinterName" }); 

     ViewData["newlist"] = items; 

這是我的看法(我知道是錯的,因爲它不工作):

@using (Html.BeginForm("search", "PrintQueues", FormMethod.Get)) 
{ 
    <fieldset> 
     <legend> 
      Search 
     </legend> 

    @Html.DropDownList("newlist",ViewData["newlist"] as SelectList) 
    @Html.TextBox("newlist") 
    <p> 
     <input type="submit" value="Submit" /> 
    </p> 
    </fieldset> 
} 

如果我選擇「服務器名稱」,並把在一個值(如「myservernaem」到文本框,我想要的網址顯示:

/search?ServerName=myservername 

我敢肯定,我的兩個控制器和視圖是不正確的

+0

你確定你不希望它顯示'myservernaem'你有一個拼寫錯誤 – MethodMan

+0

爲什麼你想要通過它作爲一個查詢字符串不會更容易只使用你的formm集合後控制器 –

+0

因爲這是一個簡單的搜索,可以使用查詢字符串作爲書籤。我使用職位撰寫數據。這是一個簡單的閱讀。 – Progger

回答

0

不是這種方法的巨大風扇...... Http通過向您的控制器發送每個input的值來工作。根據您在控制器中收到的值,您應該能夠返回相應的頁面和信息。

所以,如果你重新命名爲您的下拉列表檢索類別和你的文本框searchCriteria你有一個很好的查詢字符串,如:/Search?searchType=Printer&searchCriteria=epson。在您的控制器中,您應該能夠接收這些信息並返回相應的頁面(無論是打印機還是服務器)。

public ActionResult Search(string searchType, string searchCriteria) 
{ 
    if(searchType == "PrinterName") 
    { 
     // search your printers using searchCriteria and return appropriate View 
    } 
    else if(searchType == "ServerName") 
    { 
     // search your servers using searchCriteria and return appropriate View 
    } 
} 

如果你用這種方法去,你可以創建一個名爲enum檢索類別並用它來代替string,這樣可以讓你做的事:if(searchType == SearchType.Printer) ...

如果你想要去您的方法,當您嘗試搜索並追加網址時,您可以從輸入中獲得值:

@Html.DropDownList("searchType",ViewData["newlist"] as SelectList) 
@Html.TextBox("searchCriteria") 
<button type="button" onclick="GoToSearch();">Search</button> 

function Search() { 

    // assumption of jquery (use document.getElementById otherwise...) 
    var type = $('#searchType').val(); 
    var searchCriteria = $('#searchCriteria').val(); 

    window.location = '@Url.Action("Search", "PrintQueues")' + '?' + type + '=' + searchCriteria; 
} 

很高興回答任何問題。

相關問題