Возможно, это неубедительно, но вы также можете просто указать им обоим на какой-то внешний объект:
var cities = [];
function ParentCtrl() {
var vm = this;
vm.cities = cities;
vm.cities[0] = 'Oakland';
}
function ChildCtrl($scope) {
var vm = this;
vm.cities = cities;
}
Преимущество в том, что изменения в ChildCtrl теперь распространяются на данные в родительском объекте.
Рассмотрите возможность использования Elmah: http://code.google.com/p/elmah/
Simply add the [HandleError] attribute to the top of your Controller class. This way, any exception generated by your Controller will be handled and the user will be presented /Views/Shared/Error.aspx. The model passed to that view is a System.Web.Mvc.HandleErrorInfo object.
The controller:
[HandleError]
public class MyController : Controller
{
public ActionResult Default()
{
MyClass thing = MyClassFactory.Create();
return View(thing);
}
}
This is a for "last resort" exception handling. David's answer is best for those cases you can think of ahead of time.
Эта логика должна обрабатываться внутри вашего Контроллера, а не представления. Например, если вы пытаетесь просмотреть продукт с несуществующим MyID, выполните перенаправление на страницу с ошибкой.
Если произошла ошибка, вы также можете выполнить перенаправление в представление InvalidProduct, которое предоставит более подробное описание / инструкции ошибки.
Изменить: в дополнение к комментариям людей ниже, чтобы отловить необработанные исключения, добавьте атрибут [HandleError] либо в объявление метода ActionResult, либо в контроллер (для всех ActionResults).
[HandleError]
public ProductsController
{
public ActionResult Show(int id)
{
Product p = //e.g. get product from db
if (p == null)
{
return RedirectToAction("Error");
//return RedirectToAction("InvalidProduct");
}
return View(p);
}
Ну, вы не всегда можете отловить каждую ошибку в контроллере, но, надеюсь, ваши представления должны быть достаточно легкими, где это очень маловероятно.
Однако, если исключение все же будет сгенерировано в представлении у вас должна быть настроена настраиваемая страница ошибок 500 для перенаправления пользователя на всякий случай. Я считаю, что вы можете настроить такое перенаправление в Global.asax или это также может быть настройка IIS.
Хотя я поддерживаю ответ Дэвида Лиддла («Эта логика должна обрабатываться внутри вашего Контроллера, а не представления»), я также могу сказать вам, что вы должны кодировать защитно в целом.
Например, вместо
try
{
Html.Encode(Model.MyID)
}
catch
{
Response.Redirect("~/Error/500");
}
вы должны
if (Model == null)
{
// ...
}
else
{
//.....
}
(конечно, опять же, не помещайте логику выбора представления в представление)