2014-09-09 15 views
11

Ho un semplice modulo di ricerca sulla mia pagina _Layout.MVC 5 Html.BeginForm senza modello

Come posso passare facilmente il valore da search-fld al controller? Senza dover creare un modello o 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> 
} 

Se corro questo allora "cerca-FLD" farsi inviare al controller (offcourse)

forma Usa Ajax invece e ottenere il valore con jQuery?

risposta

13

semplicemente dando il vostro input un name attributo:

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

Poi corrispondenza quel nome con un parametro nel controllore HttpPost metodo:

[HttpPost] 
public ActionResult Search(string searchValue) 
+0

Sì, quel tipo di lavori. L'unico problema è che l'URL ora è http: // localhost: 52223/e se cerco "asd" passa il parametro e l'URL cambia in http: // localhost: 52223/Search ma voglio dire http : // localhost: 52223/Search/asd e funziona se ho un percorso personalizzato sul controller in questo modo: [Route ("Cerca/{searchString}")] MA poi non funziona poiché non passa il valore in route attributi dal modulo:/Qualche suggerimento? – stibay

+0

Hanno anche un percorso personalizzato mappato in Route.Config. In questo modo: routes.MapRoute ( nome: "Home", url: "{action}/{id}", valori predefiniti: new {controller = "Home", action = "Index", id = UrlParameter.Optional} ); – stibay

+0

Se i nomi corrispondono, vale a dire se si dispone di 'public ActionResult Search (string searchValue)', quindi è necessario anche 'name =" searchValue "' sul proprio input e '[Route (" Cerca/{searchValue} ") ] come percorso. –

0

È possibile utilizzare una chiamata AJAX così:

$(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'); 
        } 
        } 
       }) 
      }) 
     }) 

E il tuo incontrato Hod nel controller:

[HttpPost] 
public ActionResult asd(string searchValue) 
{ 

} 
Problemi correlati