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 に答える