MVC 3 Razor - показ мод на основе запроса EF - PullRequest
1 голос
/ 22 ноября 2011

На работе мне было поручено добавить дополнительные функции в существующий проект MVC 3 / Razor. Я раньше не пользовался MVC, но довольно разбираюсь в веб-формах.

Однако я не совсем уверен, где разместить все, что мне нужно.

Когда приложение загружается впервые, появляется страница входа. Когда пользователь успешно входит в систему, он видит страницу типа панели мониторинга.

Новая функция заключается в обнаружении, имеет ли пользователь FollowUpItems с Due Date < Now. Если Count > 0, отобразите модальное всплывающее окно с текстом и ссылкой на «Просмотреть последующие элементы».

Уже есть контроллер и действие, выполненное для просмотра элементов Followup. Мне нужно отобразить модальное, и я хотел бы сделать модальный объект для многократного использования - я предполагаю / думаю PartialView, где я могу передать имя контроллера, действия, параметры для возможного ActionLink, который я будет отображаться в модальном всплывающем окне, текст сообщения и т. д.

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

Заранее спасибо за руководство

1 Ответ

1 голос
/ 23 ноября 2011

Я бы обнаружил, есть ли у пользователя FollowUpItems в действии, которое загружает страницу панели мониторинга, и сохранил бы эту информацию во ViewBag.Например,

public ActionResult Dashboard()
{
    ViewBag.HasFollowupItems = UserHasFollowupItems();
    return View();
}

В этом примере UserHasFollowupItems() возвращает строку, что-то вроде 'true' или false '.

В представлении панели управления добавьте пустой элемент div, в которыймодальные данные будут загружены

<div id="followup_items"></div>

, затем добавьте document.ready () в том же представлении, которое определяет модальное значение и определяет, следует ли загружать модальное значение:

$(document).ready(function ()
{
    // define modal
    $("#followup_items").dialog({
        autoOpen: false,
        height: 'auto',
        width: 825,
        title: 'Followup Items',
        position: [75, 75],
        modal: true,
        draggable: true,
        closeOnEscape: true,
        buttons: {
            'Close': function ()
            {
                $(this).dialog('close');
            }
        },
        close: function ()
        {            
            $('.ui-widget-content').removeClass('ui-state-error');
        },        
    });

    if(@ViewBag.HasFollowupItems == 'true')
    {
        $('#followup_items').load("/FollowupItems/Load", function (data, txtStatus, XMLHttpRequest)
        {
            $('#followup_items').dialog('open');
        }
    });
});

В этомпример /FollowupItems/Load - это URL-адрес соответствующего контроллера / действия, которое генерирует данные для представления.Вы правы, представление для этого будет частичным представлением, загруженным в пустой div-элемент followup_items на странице.

Таким образом, вы можете использовать объект @ViewBag в любом месте представления, в данном случае передавая свой логический типуказывает, должен ли модал быть загружен / открыт.Я не нашел способа использовать ViewBag во внешнем файле javascript, поэтому я обычно использую встроенные теги сценариев в своих представлениях, чтобы я мог использовать ViewBag.

Вы также можете добавить идентификатор пользователя таким же образом.(/FollowupItems/Load/@ViewBag.Userid) или любые другие данные, необходимые для последующих действий.

...