2012-08-27 16 views
5

ho una visione parziale che io chiamo sulle pagine come segue: -passaggio di una variabile da rasoio cshtml a jQuery

@Html.Partial("~/Views/Shared/ImageGallery.cshtml", Model) 

Il codice per l'attuale Jquery di questa pagina è la seguente: -

<script type="text/javascript"> 
    $(document).ready(function() { 

     $('.modal_block').click(function (e) { 
      $('#tn_select').empty(); 
      $('.modal_part').hide(); 
     }); 

     $('#modal_link').click(function (e) { 
      $('.modal_part').show(); 
      var context = $('#tn_select').load('/Upload/UploadImage?Page=Article&Action=Edit&id=16', function() { 
       initSelect(context); 
      }); 
      e.preventDefault(); 
      return false; 
     }); 

    }); 
</script> 

Ora, questo funziona perfettamente, però ho bisogno di trovare un modo per passare Vars dinamici invece di Vars codificati duri a questo: -

Upload/UploadImage?Page=Article&Action=Edit&id=16 

Nel modello ho tutti i vars, tuttavia non so come posso inserirli nel jquery. Qualsiasi aiuto sarebbe molto apprezzato!

--------- UPDATE -----------------------

Questo è il codice sto mettendo in ciascuna cshtml che ha bisogno della ImageGallery.

</div> 
    @Html.HiddenFor(model => model.PageViewModel.Page.PageTitle, new { id = "PageTitle"}); 
    @Html.HiddenFor(model => model.PageViewModel.Page.PageAction, new { id = "PageAction"}); 
    @Html.HiddenFor(model => model.ArticleViewModel.Article.ArticleID, new { id = "ArticleID"}); 
<div> 
    @Html.Partial("~/Views/Shared/ImageGallery.cshtml", Model) 
</div> 

Nuovo javascript nel Galleria immagini: -

<script type="text/javascript"> 

    var pageTitle = $('#PageTitle').val(); 
    var pageAction = $('#PageAction').val(); 
    var id = $('#ArticleID').val(); 
    $(document).ready(function() { 
     $('.modal_block').click(function (e) { 
      $('#tn_select').empty(); 
      $('.modal_part').hide(); 
     }); 
     $('#modal_link').click(function (e) { 
      $('.modal_part').show(); 
      var context = $('#tn_select').load('/Upload/UploadImage?Page=' + pageTitle + '&Action=' + pageAction + '&id=' + id, function() { 
       initSelect(context); 
      }); 
      e.preventDefault(); 
      return false; 
     }); 
    }); 

</script> 

Questo funziona bene ora

risposta

18

È possibile aggiungere campo nascosto alla vista e associare i dati formano il modello. Quindi puoi facilmente leggere questo valore da jQuery.

Vista:

@Html.HiddenFor(model => model.Id, new { id = "FieldId"}); 

Script:

var id= $('#FieldId').val(); 

Inoltre si può mettere questo hiddens nella vostra visione parziale. Se la tua vista parziale non è fortemente modificata, cambia HiddenFor in Hidden. Il tuo Galleria immagini vista parziale deve contenere i seguenti div:

</div> 
    @Html.Hidden("PageTitle", Model.PageViewModel.Page.PageTitle); 
    @Html.Hidden("PageAction", Model.PageViewModel.Page.PageAction); 
    @Html.Hidden("ArticleID", Model.ArticleViewModel.Article.ArticleID); 
<div> 

In questo caso non è necessario mettere hiddens ad ogni cshtml che ha bisogno del Galleria immagini.

+0

Artem puoi darmi un esempio di codice? – Johann

+0

Vedi post aggiornato. –

+0

ok questo funziona, prima di accettarlo come risposta, è possibile invece di passarlo come vars nascosto, passandolo da qui? ------- @ Html.Partial ("~/Views/Shared/ImageGallery.cshtml", Modello) – Johann

2

è possibile impostare i campi nascosti o semplicemente dichiarare variabili JavaScript e impostare i loro valori da sia il vostro modello o il Viewbag, proprio come:

var action = @Model.action; 

o

var id = @ViewBag.id; 

e si può semplicemente utilizzare nel codice

<script type="text/javascript"> 

var action = @Model.action; 
var id = @ViewBag.id; 
$(document).ready(function() { 

$('.modal_block').click(function (e) { 
    $('#tn_select').empty(); 
    $('.modal_part').hide(); 
}); 
$('#modal_link').click(function (e) { 
    $('.modal_part').show(); 
    var urlToLoad = "/Upload/UploadImage?Page=Article&Action=" + action + "&id=" + id; 
    var context = $('#tn_select').load(urlToLoad, function() { 
     initSelect(context); 
    }); 
    e.preventDefault(); 
    return false; 
}); 

});

+0

Ho provato il tuo esempio GR7 ----- var page = @ Model.PageViewModel.Page.PageTitle; ------ ma sto ottenendo l'errore "Riferimento oggetto non impostato su un'istanza di un oggetto" – Johann

+0

puoi incollare un altro po 'del tuo codice Johann? stai impostando le variabili javascript su proprietà reali del tuo modello o Viewbag? – GR7

+0

Ciao GR7, ho aggiornato il mio codice con una soluzione che funziona ora, mi è piaciuta la soluzione di Artem, ho solo bisogno di trovare un modo per renderlo un po 'più "pulito". – Johann

Problemi correlati