2009-12-06 45 views
5

Ho una tabella che elenca i prodotti e visualizza una casella di testo quantità e un Html.ActionLink. Ogni casella di testo quantità ha un ID univoco derivato dall'id del prodotto. Penso che questo dovrebbe essere semplice ma non riesco a capire come ottenere il valore nella casella di testo associata passato al mio controller quando l'utente fa clic sul link. Il mio codice è sotto e ogni aiuto è apprezzato.Passa valore casella di testo utilizzando Html.ActionLink

<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
      <%= Html.Encode(item.Id) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.Description) %> 
     </td> 
     <td> 
      <%= Html.Encode(String.Format("${0:F}", item.Cost)) %> 
     </td> 
     <td> 
      <%= Html.TextBox(String.Format("quantity{0}", item.Id), "0") %> 
     </td> 
     <td> 
      <%= Html.ActionLink("Add", "Add", new { id = item.Id, quantity="I want the quantity here?" })%> 
     </td> 
    </tr> 

risposta

2

penso che quello che vuoi è questo:

<%= Html.TextBox(String.Format("item[{0}].quantity", item.Id), "0") %> 

Dai un'occhiata alla seguente post del blog di Scott Hanselman per maggiori informazioni su questo:

ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries

See anche questo post sul blog di Steve Sanderson. Essa vi permetterà di modificare singole voci:

Modifica un elenco di lunghezza variabile di elementi in ASP.NET MVC
http://blog.codeville.net/2008/12/22/editing-a-variable-length-list-of-items-in-aspnet-mvc/

+0

Scusa, penso che la mia domanda non sia stata formulata correttamente. Voglio che qualsiasi valore inserito dall'utente nella casella di testo venga passato al mio controllore quando fa clic sul collegamento Aggiungi. –

+0

Fondamentalmente, il codice originale suggerisce l'associazione a un elenco, ma la descrizione del requisito suggerisce l'associazione di un singolo record. –

3

Non v'è alcun modo per fare questo in HTML, quindi non c'è un modo per farlo in ASP.NET MVC.

Ci sono due possibili soluzioni a questo che si possono scegliere: quali

  1. Usa JavaScript che quando l'utente modifica la casella di testo si modifica dinamicamente il valore del tag di ancoraggio per includere ciò che digitato. Non è possibile utilizzare il routing di ASP.NET per questo poiché viene eseguito sul server e è necessario il codice lato client.

  2. Inviare un modulo anziché un collegamento. Questo è il metodo consigliato in HTML. Quando l'utente invia i dati, dovrebbe essere in una forma. Avvolgi tutto in un tag form e inserisci la casella di testo e un pulsante. Imposta l'azione del modulo come l'URL che desideri pubblicare.

Problemi correlati