после события рендеринга в MVC. Возможно?

#asp.net-mvc

#asp.net-mvc

Вопрос:

Привет.

Я знаю, что нет серверных элементов управления и событий на стороне сервера, но…:

Мое приложение похоже на почтовый ящик, и непрочитанные элементы выделены жирным шрифтом. введите описание изображения здесь

Хорошо … выделенные жирным шрифтом элементы являются непрочитанными (isRead==false) . Я хочу обновить элемент до (isRead=true) без какого-либо щелчка.. непосредственно перед рендерингом страницы.

Как я должен это сделать? Есть ли способ ASP.NET MVC или мне придется делать это с помощью jQuery?

.

Каков наилучший способ вызвать метод ПОСЛЕ рендеринга «View»?

.

Спасибо, ребята!

Комментарии:

1. Зачем вам это делать, просто потому, что они были отображены на экране, не означает, что они были прочитаны. Кроме того, read — это неправильный глагол в английском языке, прошедшее время от него также читается , просто произносится по-другому.

2. Я это знаю. Но это не совсем почтовый ящик. Это будет отображаться только жирным шрифтом. Больше ничего. Мой английский ужасен.. спасибо за совет.

3. Уверяю вас, ваш английский лучше моего португальского. Какой движок просмотра вы используете и какую версию MVC?

4. lol. MVC 3 и движок просмотра Razor.

Ответ №1:

Если вы только пытаетесь обновить представление, вы можете либо изменить модель перед передачей ее в представление, либо вы можете использовать jQuery для изменения DOM после загрузки страницы в браузер.

С другой стороны, если вы пытаетесь изменить модель (и сохранить ее как прочитанную), вы можете либо обновить модель при запросе к ней, перед передачей модели в представление, либо вы можете использовать JavaScript (jQuery), чтобы перейти по ссылке на вашем сервере, указывающей вам пометить эти записи при чтении.

Однако, как заявил R0MANARMY, только потому, что кто-то взглянул на заголовок вашей записи, не означает, что они признали ее существование.

Этого можно достичь, открыв ссылку на отдельную запись, чтобы просмотреть подробности этой записи, и попросив вашу логику пометить отдельный элемент как прочитанный в это время.

Надеюсь, это полезно 🙂

Ответ №2:

Обычно, как только ваше действие выполнено, и вы добрались до представления, возврата к коду (так сказать) нет. Существует два способа решения этой проблемы.

  1. Вы создаете копию списка сообщений для передачи в представление и меняете оригинал на have isRead=true . Я бы сказал, что это предпочтительный способ решения вашей проблемы, и код будет выглядеть примерно так:

     var viewMessages = from m in messages  
                       select new Message  
                       {  
                            // Fields you want to copy go here   
                       }
    
    viewMessages.ToList(); //This actually creates a list from the query
    
    // update the isRead property
    foreach( var m in messages ){
         m.isRead = true;
    }
      

    Теперь у вас есть две коллекции: копия исходных данных, которую вы можете передать в представление для корректного рендеринга данных, а другая — ваша исходная коллекция со всеми элементами, обновленными с помощью isRead = true .

  2. Другой вариант не так хорош с точки зрения дизайна, но он сможет достичь той же цели. Вы можете поместить код для обновления свойства непосредственно в представление, прямо под тем местом, где вы проверяете, прочитано оно или нет, чтобы изменить выделение жирным шрифтом. Я предполагаю, что ваше представление выглядит примерно так:

     @foreach(var message in View.Messages) {
       // some code
       <td @(message.isRead ? " class="selected"" : null)
           message.Heading
           @{ message.isRead = true; } // Set it as read once it's been rendered
       </td>
    }