Вы можете использовать эти методы расширения: (Сохранить как PartialWithScript.cs)
namespace System.Web.Mvc.Html
{
public static class PartialWithScript
{
public static void RenderPartialWithScript(this HtmlHelper htmlHelper, string partialViewName)
{
if (htmlHelper.ViewBag.ScriptPartials == null)
{
htmlHelper.ViewBag.ScriptPartials = new List<string>();
}
if (!htmlHelper.ViewBag.ScriptPartials.Contains(partialViewName))
{
htmlHelper.ViewBag.ScriptPartials.Add(partialViewName);
}
htmlHelper.ViewBag.ScriptPartialHtml = true;
htmlHelper.RenderPartial(partialViewName);
}
public static void RenderPartialScripts(this HtmlHelper htmlHelper)
{
if (htmlHelper.ViewBag.ScriptPartials != null)
{
htmlHelper.ViewBag.ScriptPartialHtml = false;
foreach (string partial in htmlHelper.ViewBag.ScriptPartials)
{
htmlHelper.RenderPartial(partial);
}
}
}
}
}
Использовать так:
Пример частичного: (_MyPartial.cshtml) Поместите html в if и js в else.
@if (ViewBag.ScriptPartialHtml ?? true)
<p>I has htmls</p>
}
else {
<script type="text/javascript">
alert('I has javascripts');
</script>
}
В вашем _Layout.cshtml или везде, где вы хотите, чтобы скрипты из частичных объектов были визуализированы, поставьте следующий (один раз): он будет отображать только javascript всех партиций на текущей странице в этом месте.
@{ Html.RenderPartialScripts(); }
Затем, чтобы использовать ваши частичные, просто сделайте это: он отобразит только html в этом месте.
@{Html.RenderPartialWithScript("~/Views/MyController/_MyPartial.cshtml");}
Такие последовательные ключи по сути ограничивают масштабируемость многопользовательской распределенной системы, которая также нуждается в устранении недостатка возможностей подключения. Это одна из причин, почему Firebase не поддерживает их.
Вместо Firebase имеет свой собственный тип ключа, называемый push ID . Подобно последовательности, которую вы ищете, они монотонно растут, и они также гарантированно уникальны. Но большая разница заключается в том, что идентификаторы push, в отличие от порядковых номеров большинства баз данных SQL, могут быть определены на стороне клиента.
Дополнительные сведения о массивах (похожих на последовательности) в Firebase см. В этом сообщении в блоге : https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html .
Для получения дополнительной информации об идентификаторах push-бит Firebase см. это сообщение в блоге: https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html
Если вы все еще решаете, что вы должны использовать последовательные идентификаторы, посмотрите на реализацию Kato этого здесь: http://jsfiddle.net/katowulf/5ESSp/ . Ядром этого является сохранение свойства counter
в базе данных с текущим самым высоким порядковым номером, а затем использование транзакции для его обновления.