2012-08-27 17 views
5

Mam częściowego pogląd, że wzywam stron w następujący sposób: -przechodzącą zmienną z cshtml maszynki do jQuery

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

Kod dla rzeczywistej Jquery tej strony jest następujący: -

<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> 

teraz działa to doskonale, jednak muszę znaleźć sposób, aby przekazać dynamicznych vars zamiast zakodowanego vars do tego: -

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

W modelu Mam wszystkie vars, jednak nie wiem, jak mogę wstawić je do Jquery. Każda pomoc będzie bardzo ceniona!

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

Jest to kod kładę na siebie cshtml, który potrzebuje 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> 

New Javascript w imagegallery: -

<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> 

to dobrze teraz

Odpowiedz

18

Możesz dodać ukryte pole do widoku i wiążą dane tworzą model. Wtedy możesz łatwo odczytać tę wartość z jQuery.

Widok:

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

Scenariusz:

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

Ponadto można umieścić to hiddens do swojej częściowym widokiem. Jeśli twój widok częściowy nie jest silnie wpisany, zmień HiddenFor na Hidden. Twój imagegallery częściowy widok powinien zawierać następujące Gr:

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

W tym przypadku nie trzeba umieścić hiddens każdej cshtml że potrzebuje imagegallery.

+0

Artem czy możesz dać mi przykład kodu? – Johann

+0

Zobacz zaktualizowany post. –

+0

OK to działa, zanim zaakceptuję to jako odpowiedź, czy możliwe jest zamiast przekazywania go jako ukrytych vars, przekazywanie go stąd? ------- @ Html.Partial ("~/Views/Shared/ImageGallery.cshtml", Model) – Johann

2

Można też ustawić ukrytych pól lub po prostu zadeklarować zmienne JavaScript i ustawić ich wartości z obu modelu lub Viewbag, podobnie jak:

var action = @Model.action; 

lub

var id = @ViewBag.id; 

i można po prostu użyć w kodzie:

<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

Próbowałem Twojego przykładu GR7 ----- var page = @ Model.PageViewModel.Page.PageTitle; ------ ale otrzymuję komunikat "Brak odwołania do obiektu nie jest ustawiony na wystąpienie obiektu" – Johann

+0

czy możesz wkleić jeszcze trochę kodu Johann? czy ustawiasz zmienne javascript na prawdziwe właściwości twojego modelu lub Viewbag? – GR7

+0

Witaj, GR7, zaktualizowałem swój kod rozwiązaniem, które działa teraz, podobało mi się rozwiązanie Artem, po prostu muszę znaleźć sposób, aby uczynić go nieco "czystszym". – Johann

Powiązane problemy