尝试创建下拉列表和文本框,将列表项设置为数据,将文本框设置为值 - asp.net mvc 4

时间:2013-02-07 16:56:52

标签: c# asp.net razor 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

我很确定我的控制器和视图都不正确。

1 个答案:

答案 0 :(得分:0)

不是这种方法的忠实粉丝...... Http的工作原理是向控制器发送每个input的值。根据您在控制器中收到的值,您应该能够返回相应的页面和信息。

因此,如果您将下拉列表重新命名为 searchType ,并将文本框重命名为 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
    }
}

如果您采用这种方法,您可以创建一个名为 SearchType 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;
}

很高兴回答任何问题。