2014-12-23 5 views
6

У меня есть страница с частичным представлением.

MyMainView.cshtml

<div> 
    @Html.Partial("MyPartial")  
</div> 
@section pagespecific { 
    <script type='text/javascript'> 
     $(document).ready(function(){ 
      console.log('Value is: ' + $('#MyModelField').val()); 
     }); 
    </script> 
} 

MyPartial.cshtml

<div> 
    @Html.HiddenFor(x => x.MyModelField) 
</div> 

Значение MyModelField в модели True, однако, я получаю следующий вывод в консоль браузера:

Value is: undefined 

Почему это не поднимает поле? Не следует ли добавить частичный вид в DOM до этого пожара?

Если я меняю $(document).ready() на $(window).load(), он работает должным образом.

Как я могу достичь желаемого поведения?

+0

DOM-готовый событие Тот же вопрос не может, возможно, пожар до того, как сервер завершает строительство и отправки HTML-разметки в браузере. – Sparky

+0

Я рекомендую сначала просмотреть исходный код страницы перед тем, как перейти к выводу, что '$ ('# MyModelField')' не существует ... – deostroll

ответ

0

$(document).ready не срабатывает, пока частичное изображение не отображается, поскольку частичный вид отображается на стороне сервера. Вы используете неправильный идентификатор в jquery, потому что @Html.HiddenFor(x => x.MyModelField) не будет создавать элемент с ID = «MyModelField». Элемент будет иметь идентификатор с префиксом, который зависит от вашего имени класса модели.

Проверьте идентификатор элемента в инструментах браузера (F12) и определите реальный идентификатор.

Пример: Если вы модель модели User класс. Сгенерированный идентификатор будет выглядеть так: User_MyModelField

+0

Нет - в этом случае идентификатор является 'MyModelField'. Это из источника страницы: ' ' – Alex

3

Да, это правда, причина в том, что всякий раз, когда ваш дом готов .ready уволен. Поэтому сначала загружается ваша страница, и она запускает функцию jquery .ready(), а частичное представление последовательности также выполняется на стороне сервера.

Оба варианта отличаются друг от друга.

Чтобы остановить или вы хотите выполнить через некоторое время.

  • Либо вы можете сделать это в частичном

или

  • Дайте время задержки вашей продолжительности

    $(document).ready(function(){ 
        console.log('Value is: ' + $('#MyModelField').val()); 
        setTimeout("$('#buttonid').click()", DelayDuration); 
    }); 
    

    // DelayDuration означает дать значение milisecond, 1000 milisecond = 1 с

спросил здесь

JQuery events don't work with ASP.NET MVC Partial Views

Is it possible to kick off a javascript function after a partial view renders in MVC Asp.net?

Смежные вопросы