ASP.Net MVC Come passare i dati dalla vista al controller

Sono completamente nuovo a ASP.Net e sono sicuro che questa è una domanda molto semplice Ho una vista in cui c’è un link per generare report ma per essere in grado di generare report devo chiedere all’utente di fornire un nome di testo adatto come bene.

Finora sono stato in grado di passare i dati dal server per visualizzare utilizzando i Modelli passati dal mio controller per visualizzare, ma non sono sicuro di come passare i dati dalla visualizzazione al mio controller.

Ho solo bisogno di passare una stringa dalla vista al controller in questo caso.

Qualunque consiglio con l’esempio sarà apprezzato.

AGGIORNARE

Capisco che devo postare i dati sul server, ma come si realizza in forma di codice razorhtml e controller?

Puoi farlo con ViewModels come il modo in cui hai passato i dati dal tuo controller per vederli.

Supponi di avere un visore simile a questo

public class ReportViewModel { public string Name { set;get;} } 

e nella tua azione GET,

 public ActionResult Report() { return View(new ReportViewModel()); } 

e la tua vista deve essere fortemente digitata in ReportViewModel

 @model ReportViewModel @using(Html.BeginForm()) { Report NAme : @Html.TextBoxFor(s=>s.Name)  } 

e nel metodo di azione HttpPost nel controller

 [HttpPost] public ActionResult Report(ReportViewModel model) { //check for model.Name property value now //to do : Return something } 

O semplicemente, puoi farlo senza le classi POCO (Viewmodels)

 @using(Html.BeginForm()) {   } 

e nella tua azione HttpPost, usa un parametro con lo stesso nome del nome della casella di testo.

 [HttpPost] public ActionResult Report(string reportName) { //check for reportName parameter value now //to do : Return something } 

EDIT: come da commento

Se si desidera postare su un altro controller, è ansible utilizzare questo overload del metodo BeginForm.

 @using(Html.BeginForm("Report","SomeOtherControllerName")) {   } 

Passare i dati dal metodo di azione per visualizzare?

È ansible utilizzare lo stesso modello di vista, è sufficiente impostare i valori delle proprietà nel metodo di azione GET

 public ActionResult Report() { var vm = new ReportViewModel(); vm.Name="SuperManReport"; return View(vm); } 

e secondo te

 @model ReportViewModel 

@Model.Name

Can have input field with value set in action method

@using(Html.BeginForm()) { @Html.TextBoxFor(s=>s.Name) }

Nel caso in cui non si voglia / si debba postare:

 @Html.ActionLink("link caption", "actionName", new { Model.Page }) // view's controller @Html.ActionLink("link caption", "actionName", "controllerName", new { reportID = 1 }, null); [HttpGet] public ActionResult actionName(int reportID) { 

Notare che il reportID nella nuova parte {} corrisponde a reportID nei parametri di azione, è ansible aggiungere qualsiasi numero di parametri in questo modo, ma più di 2 o 3 (alcuni continueranno a sostenerlo) si dovrebbe passare un modello tramite un POST ( come per altra risposta)

Modifica : aggiunto null per il sovraccarico corretto come indicato nei commenti. C’è un numero di overload e se si specifica sia action + controller, allora è necessario sia routeValues ​​che htmlAttributes. Senza il controller (solo didascalia + azione), sono necessari solo routeValues ​​ma potrebbe essere la procedura migliore per specificare sempre entrambi.

 

Controller:

 [HttpPost] public ActionResult myAction(string valueINeed) { //.... }