2016-08-09 3 views
0

Существует контроллер, который ловит исключение. Я хотел бы передать сообщение об ошибке на общий javascript в _Layout.cshtml, чтобы применить ко всем страницам. Он полностью находит, если значение передается из обычного вида в _Layout.cshtml, например, @ViewBag = "сообщение об ошибке"; в представлении или ViewBag.ErrorMessage = "сообщение об ошибке"; в контроллере, но он не работает в частичном представлении.Как передать значение из частичного представления в общий вид _Layout.cshtml в asp.net MVC?

Что мне делать, чтобы передать строковое сообщение с частичного представления на _Layout.cshtml ??

+0

На какое событие вы хотите передать значение? на странице загрузки? – Shyju

+2

ViewBag должен быть доступен в файле макета, можете ли вы отправить какой-то код, чтобы показать, что вы пробовали? – sachin

ответ

0

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

, например, в _layout у вас есть:

<script> 
    function ShowError(message) { 
     alert(message); 
    } 
</script> 

, а затем в вашем парциальное у вас есть:

<script> 
// check for existence of error and if so 
ShowError(ErrorMessage); 
</script> 
+0

В основном 'Partial View' не использует' _Layout файл'. Таким образом, это решение неэффективно ... – mmushtaq

+0

@mmushtaq, но это определенно в вопросе. – Dillon

+0

@mmushtaq Есть ли другое решение, кроме использования файла _Layout, если я хочу глобально применить функцию предупреждения ко всем частичным представлениям? – dennisccy

0

Если вы хотите передать данные с частичным видом на его макете в течение того же запроса, вы можете сделать это через ViewBag объекта:

частичный вид файла

@{ 
ViewBag.ErrorMessage = "error message"; 
} 

файл _layout

@if (ViewBag.ErrorMessage != null) 
{ 
    <script> 
    alert(@ViewBag.ErrorMessage); 
    </script> 
} 

Если вы хотите, чтобы поймать исключение в действии контроллера, а затем передать сообщение об ошибке на редирект, вы можете сделать это с помощью TempData:

контроллер

public ActionResult SomeAction(){ 
... 
try{ 
    .... 
}catch(Exception e){ 
    TempData["errorMessage"] = e.Message; 
    return RedirectToAction("MaybeSomeOtherAction"); 
} 
... 
} 

_layout файл для "MaybeSomeOtherAction"

@if (TempData["errorMessage"] != null) 
{ 
    <script> 
    alert(@TempData["errorMessage"]); 
    </script> 
} 
0

Сделать общее свойство для ошибок;

public static class Common 
    { 
     public static bool ERROR {get;set;} 
    } 

Если исключение выбрано или для отображения сообщения об ошибке, установите для этого свойства значение true;

try 
{ 
    //Any Code 
} 
catch(Exception) 
{ 
    Common.ERROR = true; 
    return PartialView("_PartialView"); 

} 

В вашем файле _Layou, взгляды или _Partial View, вы можете проверить это свойство в Document.Ready и если это правда, то вы можете показать предупреждение об ошибке.

$(function(){    
     if(@Html.Raw(Json.Encode(@HelloWorldMvcApp.Common.ERROR))) 
     { 
       alert("error message"); 
        return; 
     } 
}) 


Demo if this property is True

Demo if it is False or its value is not set to true

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