2015-05-19 13 views
5

Sto colpendo quello che penso sia un problema piuttosto stupido a cui ovviamente manco qualcosa di semplice.Asp.net modulo mvc non sta inviando i valori dei parametri

Ho creato un semplice sito di asp.net mvc (.net 4.5) e ho modificato l'indice in modo da avere un semplice modulo che vorrei semplicemente postare su se stesso e restituire le variabili.
qui è la mia forma

@using(Html.BeginForm()) 
{ 
    <input type="text" class="form-control" id="empId" placeholder="Enter EmployeeId (ex. 999999)"> 
    <input type="text" class="form-control" id="account" placeholder="Enter account)"> 
    <input type="email" class="form-control" id="email" placeholder="Enter email"> 
    <input type="submit" class="btn btn-default" value="Submit" /> 
} 

e qui è il mio metodo post

[HttpPost] 
public ActionResult Index(string empId, string account, string email) 
{ 
    return Content(Request["empId"]); 
} 

non ottengo niente indietro quando i posti di pagina. Anche nel debugger posso vedere che il metodo viene colpito, tuttavia tutti i parametri sono nulli anche se ho compilato il modulo.

Mi manca qualcosa di ovvio?

+1

aggiungere nome oltre a id: name = "empId", name = "account", name = "email", ... E dopo i test, si prega di prendere in considerazione l'uso di modello di associazione e modello, è più pulito/intelligente :-) – clement

+0

grazie! questo ha risolto il mio problema. Ho appena intenzione di rinunciare alla programmazione per il giorno – user257655

+0

cool, ho fatto una risposta completa, per favore considera di convalidarlo se va bene – clement

risposta

10

Basta dimenticare l'attributo name:

@using(Html.BeginForm()) 
{ 
    <input type="text" class="form-control" name="empId" id="empId" placeholder="Enter EmployeeId (ex. 999999)"> 
    <input type="text" class="form-control" name="account" id="account" placeholder="Enter account)"> 
    <input type="email" class="form-control" name="email" id="email" placeholder="Enter email"> 
    <input type="submit" class="btn btn-default" value="Submit" /> 
} 

ho sempre Raccomandare ad utilizzare il modello instrad legame di alcune stringhe o int. Se li usate bene, renderà il modello di lavoro vincolante senza sforzi:

Modello:

public class ExampleModel 
{ 
public intempId { get; set; } 
public string account{ get; set; } 
public string email{ get; set; } 
} 

Nella pagina Razor:

@using(Html.BeginForm()) 
    { 
     @Html.EditorFor((m => m.intempId, new { @class = "form-control" })) 
     @Html.EditorFor((m => m.account, new { @class = "form-control" })) 
     @Html.EditorFor((m => m.email, new { @class = "form-control" })) 
    } 

e poi nel controllore:

[HttpPost] 
public ActionResult Index(ExampleModel model) 
{ 
    return Content(model.empId); 
} 

Con il modello, è inoltre possibile aggiungere la convalida e così via, direttamente sul modello e quindi ASP.NET MVC può inserire la convalida in entrambi front-end con validazione jquery e back-end (if (ModelState.IsValid)). Un sacco di vantaggi per utilizzare i modelli!

+0

Grazie per aver fornito all'OP il modo corretto di gestire queste cose in MVC :) –

+0

Un po 'di aiuto è sempre il benvenuto quando si avvia la nuova tecnologia :-) – clement

Problemi correlati