В комментарии on this question, Phil упоминает, чтоПочему строки Hardcoding URL в приложении MVC - плохая идея? (Или это?)
жестко прописывать URL строки в приложение MVC это плохая идея. Помощники есть по этой причине
Это так? Если да, то почему?
В комментарии on this question, Phil упоминает, чтоПочему строки Hardcoding URL в приложении MVC - плохая идея? (Или это?)
жестко прописывать URL строки в приложение MVC это плохая идея. Помощники есть по этой причине
Это так? Если да, то почему?
Построение URL-адресов является результатом конфигурации маршрута в глобальном приложении вашего приложения. Когда вы используете помощников, таких как ActionLink, они проверяют конфигурацию маршрута и соответственно генерируют маршруты.
Если вы измените конфигурацию своего маршрута позже или установите приложение в виртуальный каталог, URLS, сгенерированные с помощью помощников в целом приложении, будут динамически изменяться, поэтому вам не нужно проверять и изменять каждую строку жестко заданного URL вручную, а ваше приложение менее вероятно, сломается.
Если вы хотите разметки якорей, вы можете использовать UrlHelper.Action Method. Внутри всех помощников, которые зависят от генерации URL-адресов, используйте этот метод.
<a href="@Url.Action("Logon", "Account")">logon<a>
Я написал небольшой сайт с жестко закодированными URL-адресами. Я, как правило, избегаю практики сейчас из-за головной боли, причиной которой является изменение всех URL-адресов, как только вы нажимаете на производство.
Это был небольшой webapp, и он по-прежнему подталкивал меня к стене. Я буду следовать этому совету :)
URL-адреса этот вопрос не меняется при нажатии на производство, если не использовать виртуальные каталоги. Это больше касается имен контроллеров и действий. – bzlm
В то время как упомянутый вопрос касался имен контроллеров/действий, этот вопрос задавали вопрос о том, почему вышеупомянутый комментарий был правдой. Я просто упоминаю об этом как о другой причине, почему URL-адреса не должны быть жестко закодированы –
Я предпочел бы не использовать Url.Action («входа», «Счет»), как это жёстко и любое изменение имени действия, его трудно определить.
Лучше мы можем написать расширение, как,
public static MvcHtmlString ActionLink<TController>(this HtmlHelper helper,
Expression<Func<TController, object>> expression, string displayText)
{
string controller = typeof(TController).GetControllerName();
string action = expression.GetActionName();
return helper.ActionLink(displayText, action, controller);
}
, а затем использовать его в представлении, как,
@Html.Action<AccountController>(a=>a.Logon(),"Click here")
Это уже в Futures, правильно? И есть небрежное исполнение; есть отчет с номерами где-то ... – bzlm
Это должно быть комментарий – archil
Да, у него есть некоторые проблемы с производительностью, но если ваш сервер масштабируются достаточно ... Это может быть принято во внимание. в соответствии с [Эта ссылка] (http://devlicio.us/blogs/hadi_hariri/archive/2010/03/09/profiling-apps-1-of-n-the-mvc-actionlink.aspx) разница не слишком много – Manas
+1 нашли время, чтобы проверить на комментарий по в действительности :) – footy