Открытие соответствующего разговора в модальной коробке - PullRequest
0 голосов
/ 25 апреля 2011

Я использую метод @Darin Dimitrov, описанный в Загрузка частичного представления в jquery.dialog , чтобы позволить пользователям щелкнуть одно из своих личных сообщений и просмотреть его внутри модального поля. Я использую ASP.NET MVC3 и Razor в качестве движка просмотра. Но у меня возникли некоторые проблемы с тем, чтобы заставить это работать ... Вот что я пытался сделать ниже:

Сообщения отображаются в виде таблицы:

<tr id="@item.Id" class="openConversationLink">
    <td class="newMessageStatus">@MessageStatus(item)</td>
    <td class="msgSenderName">@item.Sender</td>
    <td class="msgSubject">@item.Subject</td>
    <td class="msgLastUpdated">@item.LastUpdated</td>
    <td class="modalItemActions"></td>
</tr> 

И внутри того же частичного представления я получил следующий блок скрипта:

<script type="text/javascript">
    $(function () {
        $("#conversationModal").dialog({
            autoOpen: false,
            width: 850,
            height: 600,
            resizable: false,
            draggable: false,
            modal: true,
            open: function (event, ui) {
                var convId = ui.attr('id');
                alert(convId);
                $(this).load('@Url.Action("Conversation", "Message", new { conversationId = convId})');

            }
        });

        $(".openConversationLink").click(function () {
            $("#conversationModal").dialog('open');
        });
    });
</script>

По сути, я не уверен, к чему относятся параметры event и ui внутри обработчика open. Так что небольшое объяснение по обоим будет оценено. Но в любом случае, даже сообщения не отображаются сейчас, я получаю эту ошибку:

Сообщение об ошибке компилятора: CS0103: Название «convId» не существует в текущий контекст. Источник: $ (Это) .load ( '@ Url.Action ( "Разговор", "Сообщение", новый convId}) ');

По сути, я не хочу, чтобы эта строка запускалась до тех пор, пока я фактически не нажму на одну из строк (чтобы открыть диалоговое окно беседы), но похоже, что она действительно запускается при открытии страницы сообщений.

UPDATE:

Вот мой код jQuery:

$(function () {
    $("#conversationModal").dialog({
        autoOpen: false,
        width: 850,
        height: 600,
        resizable: false,
        draggable: false,
        modal: true,
        open: function (event, ui) {
            var convId = event.target.attr('id');
            alert(convId);
            $(this).load('Message/Conversation/' + convId);

        }
    });

    $(".openConversationLink").click(function () {
        $("#conversationModal").dialog('open');
    });
});

Что-нибудь, что можно с этим сделать? :)

1 Ответ

1 голос
/ 25 апреля 2011

Прежде чем идти дальше, вам необходимо понять ключевую вещь здесь>

Метод Url.Action () работает на стороне сервера.Все, что передается, должно решаться на стороне сервера.Любые переменные, объявленные в Javascript на стороне клиента, полностью игнорируют код на стороне сервера, поэтому компилятор пытается найти convId в коде на стороне сервера и, очевидно, не может его найти.Таким образом, это дает ошибку.

Теперь, сказав, что нам нужно найти способ передать convId на сервер.Для этого вам потребуется выполнить ручную конкатенацию строк на стороне клиента.Вы можете сделать что-то вроде этого>> 1005 *

'@Url.Action("Conversation", "Message")' + '?conversationId='+convId

Вы видите, что мы использовали код на стороне сервера для генерации /Message/Conversation, а затем сцепили его на стороне клиента, чтобы сделать его /Message/Conversation/?conversationId=valueOfconvId

Надеюсь, это имеет смысл:)

РЕДАКТИРОВАТЬ:

<script type="text/javascript">
var clickedId;
   $(function () {
        $("#conversationModal").dialog({
            autoOpen: false,
            width: 850,
            height: 600,
            resizable: false,
            draggable: false,
            modal: true,
            open: function (event, ui) {

                $(this).load('Message/Conversation/' + clickedId);

            }
        });

        $(".openConversationLink").click(function () {
            clickedId = $(this).attr("id");
            $("#conversationModal").dialog('open');
        });
    });
</script>

имеет смысл сейчас?мы сохраняем идентификатор кликаемого tr в глобальной переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...