В этой части я анонсировал jBlogMvc ASP.NET MVC и jQuery blogengine, которые я создаю, чтобы узнать больше о двух новых технологиях, и обсудить нулевую версию движка блога.
Давайте начнем
Итак, что же такое jBlogMvc ? Это небольшой блог, который я собираюсь создать в гибком процессе, jBlogMvc, если вы не заметили, j означает jQuery, Blog для самого движка и Mvc для ASP.NET MVC. Здесь я говорю, что этот движок будет простым и полным, я постараюсь максимально расширить возможности и создать его расширяемым способом, таким как современные движки блогов, для включения тем, виджетов и плагинов. Также я должен отметить, что работа над этим движком блога полностью вдохновлена замечательными движками блогов с открытым исходным кодом, которые включают BlogEngine.NET, WordPress и другие не блог-движки, как yonkly, и многие другие.
Что покроет часть 0?
Помимо анонса движка блога, в этой части у меня будет версия 0, которая будет иметь следующее:
- Vistor
- Просмотр сообщений в хронологическом порядке.
- Просмотр отдельных сообщений.
Хорошо, покажи мне код!
База данных
Для этой части ZERO я не включил много для движка блога, единственная таблица, которую я включил, является таблицей Post, как показано ниже, я верю, что эта таблица будет расширяться больше по времени и большему количеству частей в серии.
Маршруты
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Posts",
"post/{slug}",
new { controller = "Home", action = "post" }
);
routes.MapRoute(
"Default",
"{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
модели
Просто добавил сюда файл dbml (Linq to Sql DataContext), и я добавил файл PostEx.cs и добавил свойство для частичных классов Post, God Bless. PostEx.cs, как показано в листинге 2.
public partial class Post
{
public string RelativeLink
{
get
{
return VirtualPathUtility.ToAbsolute("~/post/") + Slug;
}
}
}
Контроллеры
Пока у меня есть только один контроллер HomeController, который на данный момент имеет всего 3 действия.
- index: отображает все сообщения в хронологическом порядке.
- post (slug): отображает сообщение с соответствующим слагом, если не найдено, отображает сообщение об ошибке404
- premalink (guid): визуализирует представление для сообщения с соответствующим guid, если не найдено, оно отображает сообщение об ошибке404
HomeController, как показано в листинге 2.
public class HomeController : Controller
{
/// <summary>
/// Renders a view with all posts sorted in a chronological order
/// </summary>
/// <returns></returns>
public ActionResult index()
{
var posts = Helpers.GetPostList() ?? new List<Post>();
return View(posts);
}
/// <summary>
/// Renders a view for the post with a matching slug
/// if not found it renders error404 view
/// </summary>
/// <param name="slug">Post slug to be matched</param>
public ActionResult post(string slug)
{
var post = Helpers.GetPostBySlug(slug);
return post != null ? View("single", post) : View("error404");
}
/// <summary>
/// Renders a view for the post with a matching premalink
/// if not found it renders error404 view
/// </summary>
/// <param name="id">Post premalink to be matched</param>
public ActionResult premalink(Guid id)
{
var post = Helpers.GetPostByPemalink(id);
return post != null ? View("single", post) : View("error404");
}
}
Просмотры
Теперь решение содержит одну главную страницу для всего сайта, три просмотра и один пользовательский контроль
- site.Master: дает общий внешний вид сайта
- index.aspx: отображает все сообщения.
- single.aspx: выводит один пост.
- error404.aspx: будет отображаться при запросе несоответствующего сообщения slug или premalink
- _postView.ascx: шаблон сообщения, который будет использоваться
Utils
Два занятия, которые мне помогают
- Config: Содержит некоторые статические свойства, которые читают из жестко закодированных строк (в следующей версии следует читать из web.config или даже из таблицы базы данных).
- Помощники: только некоторые распространенные вспомогательные методы.
Файл конфигурации
public class Config
{
static public string BlogName { get { return "My Blog Name"; } }
static public string BlogDescription { get { return "This blog is built using the ASP.NET MVC framework."; } }
static public string BlogUrl { get { return VirtualPathUtility.ToAbsolute("~/"); } }
static public string Version { get { return "0.1.0.0"; } }
}