public ActionResult PostMenuConfig(MenuConfigModel m)
    {
      if (string.IsNullOrEmpty(m.Menu))
        ModelState.AddModelError("menu", "You must supply at least one menu item.");

      var lines = m.Menu.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
      if (lines.Where(l => l.Split(';').Length < 2).Count() > 0)
        ModelState.AddModelError("menu", "Each menu item must have at least some text and href.");

      if (ModelState.IsValid)
      {
        var appSvc = AppServiceRepository.GetService();
        var include = appSvc.GetInclude<MenuCustomInclude>(m.IncludePath);

        IList<CustomMenuItem> items = new List<CustomMenuItem>();
        foreach (string line in lines)
        {
          CustomMenuItem item = new CustomMenuItem();
          var vals = line.Split(';');
          item.Text = vals[0].Trim();
          item.Href = vals[1].Trim();
          if (vals.Length > 2 && vals[2].Trim().Length > 0) item.Title = vals[2];
          if (vals.Length > 3 && vals[3].Trim().Length > 0) item.ExactSelect = vals[3] == "1";
          items.Add(item);
        }
        include.MenuItems = items;
        AppServiceRepository.UpdateService(appSvc);
        return Json(new { success = true, includePath = m.IncludePath });
      }

      return PartialView("MenuConfig", m);
    }
 public ActionResult MenuConfig(MenuConfigModel m)
 {
   var include = AppService.GetInclude<MenuCustomInclude>(m.IncludePath);
   m.Menu = string.Concat(include.MenuItems.Select(mi =>
     string.Format("{0};{1};{2};{3}{4}", mi.Text, mi.Href, mi.Title,
     (mi.ExactSelect) ? "1" : "0", Environment.NewLine)).ToArray());
   return PartialView("MenuConfig", m);
 }