web-dev-qa-db-fra.com

MVC 5 Html.BeginForm sans modèle

J'ai un formulaire de recherche simple sur ma page _Layout.

Comment puis-je facilement transmettre la valeur de search-fld au contrôleur? Sans avoir à créer un modèle ou ViewModel.

@using (Html.BeginForm("Search", "Home", new { id = "search-fld" }, FormMethod.Post, new { @class = "header-search pull-right" }))
{
    @Html.AntiForgeryToken()

    <input type="text" placeholder="Search" id="search-fld">
    <button type="submit">
        <i class="fa fa-search"></i>
    </button>
}

Si je lance ceci alors "search-fld" sera envoyé au contrôleur (hors cours)

Utilisez plutôt la forme Ajax et obtenez la valeur avec Jquery?

11
stibay

Simplement en donnant à votre input un attribut name:

<input type="text" placeholder="Search" id="search-fld" name="searchValue">

Ensuite, associez ce nom à un paramètre de la méthode de votre contrôleur HttpPost:

[HttpPost]
public ActionResult Search(string searchValue)
14
mattytommo

Vous pouvez utiliser un appel Ajax comme ça:

 $(document).ready(function() {
$("#yourButton").click(function () {
            var yourValue = $("#search-fld").val() ;
            var url = "Search/asd/";
            $.ajax({
                url: url,
                cache: false,
                type: 'POST',
                data: {
                    searchValue = yourValue
                }
                success: function (data) {
                    if (data === true) {
                        alert('Success');
                    } else {
                        alert('Failed');
                    }
                    }
                })
            })
        })

Et votre méthode dans le contrôleur:

[HttpPost]
public ActionResult asd(string searchValue)
{

}
0
Julien698