У меня особенно интересная проблема с Razor Html Helper, которую я пытаюсь реализовать. Цель этого помощника состоит в том, чтобы принять System.Type, сгенерировать JQuery-валидную форму из свойств этого Типа и связанных атрибутов, а также вернуть строку JavaScript, которая будет использоваться во время выполнения в качестве правил проверки для указанной сгенерированной формы. Я генерирую форму, многократно вызывая @ Html.Raw (), создавая ее, когда я перебираю свойства и атрибуты. Первоначально html-помощник был написан внутри единственного файла, который собирался его использовать, но поскольку это обобщенный и часто используемый помощник, я переместил его в папку App_Code в моем проекте.
Это проблема: я обнаружил, что ViewData не доступен для меня, чтобы возвращать какие-либо данные от помощника, когда этот помощник находится в App_Code. Первоначально у меня было два помощника; один для генерации формы и сжатия строки JavaScript в ViewData, а второй - для того, чтобы взять эту же строку JavaScript и распечатать ее в документе в моем блоке сценариев на стороне клиента. Я хочу, чтобы этот помощник не только генерировал форму, но и давал мне эту строку JavaScript за один проход, поэтому не нужно выполнять дублирующую работу O (n).
Оригинальный псевдокод:
@helper MakeFormAndValidationRule(Type)
{
//generate form
//write form using @Html.Raw()
//generate validation rules simultaneously
//store validation rules in ViewData
}
@helper WriteValidationRules()
{
@Html.Raw(ViewData["rules"]);
}
<form>
MakeFormAndValidationRule(Type)
</form>
<script>
form.validate(@WriteValidationRules())
</script>
Вопрос: какова «лучшая практика» для подобных случаев? Я мог бы написать правила проверки в DOM для последующего извлечения и извлечь их, используя магию JQuery во время выполнения, но если есть лучший, более чистый способ сделать это, я хотел бы знать.