2013-12-11 12 views
7

Ho visto alcuni post relativi a questo, ma non riesco a farlo funzionare. Con il reindirizzamento ottengo un errore "la risorsa non può essere trovata".MVC Reindirizza per visualizzare da jQuery con parametri

Sto tentando di reindirizzare a una pagina Dettagli. C'è un elemento ID in I che memorizzo come NestId che voglio essere in grado di passare alla vista. In questo momento voglio solo reindirizzare alla pagina dei dettagli, non c'è un modello o qualcosa collegato ad esso. Voglio solo che il NestId lo faccia in modo che io possa usarlo per fare più chiamate AJAX con esso.

Ecco il mio jQuery:

$('#results').on('click', '.item', function() { 
      var NestId = $(this).data('id'); 
      var url = '@Url.Action("Details, Artists")'; 
      window.location.href = url; 
     }) 

Ecco la funzione sul controller:

public ActionResult Details(string NestId) 
    { 
     ViewBag.NestId = NestId; 
     return View(); 
    } 

non sono sicuro se vado su questo il modo giusto, ma l'aiuto sarebbe apprezzato , Mi sono bloccato per un po '. Grazie!

risposta

19

Se il gestore di clic viene chiamato con successo, allora questo dovrebbe funzionare:

$('#results').on('click', '.item', function() { 
      var NestId = $(this).data('id'); 
      var url = "/Artists/Details?NestId=" + NestId; 
      window.location.href = url; 
     }) 

EDIT: In questo caso particolare, dato che il parametro del metodo di azione è una stringa che è annullabile, allora se NestId == null, ha vinto' t causa qualsiasi eccezione, dato che ModelBinder non si lamenterà di ciò.

+0

Questo sembra aver fatto il lavoro. C'è un modo per codificare l'url in questo modo? – mrshickadance

+1

Puoi semplicemente sostituirlo con: @ Url.Action ("Dettagli", "Artisti", nuovo {NestId = '+ NestId +'}) 'come suggerisce @ABs. Inoltre, considera di accettare la risposta che ti ha aiutato per aiutare gli altri. – Daniel

+0

Sì, stavo aspettando di vedere se c'era una soluzione che non lo codificasse. Quando ho provato l'opzione che tu e AB avete detto, ricevo un errore (ho commentato il suo sotto). – mrshickadance

-1

redirect con query string

$('#results').on('click', '.item', function() { 
        var NestId = $(this).data('id'); 
        // var url = '@Url.Action("Details", "Artists",new { NestId = '+NestId+' })'; 
        var url = '@ Url.Content("~/Artists/Details?NestId =' + NestId + '")' 
        window.location.href = url; 
       }) 
+0

Ottengo un errore attorno al NestId dicendo che ci sono troppi caratteri in caratteri letterali nell'URL ... – mrshickadance

+0

si può provare questo, var url = '@ Url.Content ("~/Artists/Details? NestId =' + NestId + '")' –

0

Questo potrebbe anche funzionare credo:

$('#results').on('click', '.item', function() { 
      var NestId = $(this).data('id'); 
      var url = '@Html.Raw(Url.Action("Artists", new { NestId = @NestId }))'; 
      window.location.href = url; 
     }) 
+0

@NestId non funziona. –

2

ho usato per fare come questo

all'interno vista

<script type="text/javascript"> 

//will replace the '_transactionIds_' and '_payeeId_' 
var _addInvoiceUrl = '@(Html.Raw(Url.Action("PayableInvoiceMainEditor", "Payables", new { warehouseTransactionIds ="_transactionIds_",payeeId = "_payeeId_", payeeType="Vendor" })))'; 

su javascript file di

var url = _addInvoiceUrl.replace('_transactionIds_', warehouseTransactionIds).replace('_payeeId_', payeeId); 
     window.location.href = url; 

in questo modo posso in grado di trasmettere i valori dei parametri su richiesta ..

utilizzando @Html .Raw, url non otterrà am p; per i parametri

+0

Mi piace questa soluzione, molto pulita! :) – Schoof

Problemi correlati