2015-08-11 2 views
1

У меня есть вспомогательная процедура, которую я использую в нескольких представлениях, которая обертывает отличное форматирование бутстрапа для отображения сообщения.MVC Общая процедура, использующая viewbag

@MyHelpers.StatusMessage(ViewBag.Status, ViewBag.StatusMessage) 

Для того, чтобы это работало, я должен использовать TempData кратко (в случае перенаправления), а затем поместить значения обратно в viewbag.

Как так:

@{ 
    // View Init 

    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 

    // In case we are here due to a redirect... 
    if (!String.IsNullOrEmpty((string)TempData["Status"])) 
    { 
     ViewBag.Status = TempData["Status"]; 

    } 
    if (!String.IsNullOrEmpty((string)TempData["StatusMessage"])) 
    { 
     ViewBag.StatusMessage = TempData["StatusMessage"]; 
    } 

} 

Я бы очень хотел, чтобы это было общим рутина, как мой помощник, но я не могу получить доступ к viewbag оттуда.

Есть ли где-нибудь я могу разместить общий код и по-прежнему получить доступ к сумке?

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

Спасибо.

Разрешение:

Не идеально, но позволяет для повторного использования и экономит несколько строк кода.

@helper SetStatusInfoFromTempData(dynamic viewBag, string status, string statusMessage)  
{ 

     // In case we are here due to a redirect... 
    if (!String.IsNullOrEmpty(status)) 
    { 
     viewBag.Status = status; 

    } 
    if (!String.IsNullOrEmpty(statusMessage)) 
    { 
     viewBag.StatusMessage = statusMessage; 
    } 

} 

ответ

1

ViewBag является динамическим, так что вы можете добавить его в свой вспомогательный метод в качестве параметра для совместной обработки:

public void MyHelperMethod(dynamic viewBag, Dictionary<string, string> tempData) 
{ 
    // In case we are here due to a redirect... 
    if (!String.IsNullOrEmpty((string)tempData["Status"])) 
    { 
     viewBag.Status = tempData["Status"]; 
    } 

    if (!String.IsNullOrEmpty((string)tempData["StatusMessage"])) 
    { 
     viewBag.StatusMessage = tempData["StatusMessage"]; 
    }   
} 

P.S. Я предположил, что ваш тип данных для TempData является словарем, пожалуйста, исправьте по мере необходимости.

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