0

我正在尝试创建一个基于服务器名称或打印机名称进行搜索的搜索表单。这是我的控制器的片段:

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”,我希望 url 显示:

/search?ServerName=myservername

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

4

1 回答 1

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

如果您采用这种方法,您可以创建一个enum名为SearchType并使用它而不是string,这将允许您执行以下操作:if(searchType == SearchType.Printer)...

如果您想采用您的方法,则可以在尝试搜索和附加 URL 时从输入中获取值:

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

很高兴回答任何问题。

于 2013-02-07T20:00:45.150 回答