У меня есть форма регистра, созданная с помощью mvc3 scaffolding.
например,
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
и т. Д.
У меня есть выпадающий список, где пользователь может выбрать, если ончеловек или компания.Если выбран человек, страница загружается со свойствами этого человека, такими как дата рождения, но если он / она выбирает параметр «компания», я отключаю часть формы (с помощью jquery .detach () .attach ()) на скрытый.div вне формы (поэтому значения не публикуются при отправке)
Это прекрасно работает с моей пользовательской проверкой и моделями представления, единственная проблема заключается в том, что нет проверки jquery для вновь включенных элементов.
Я хотел бы использовать ненавязчивую проверку jquery, но как мне вручную прикрепить обработчики к новым элементам формы (или повторно обработать весь dom для проверки)?
edit: после проверки этой записи блога: http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/
Я попытался обновить свой код.Я включил JavaScript, описанный там, и попытался обработать недавно вставленную часть формы.когда это не имело никакого значения, я переключился на .remove () и .html () мой код и вставил голый HTML, но это никак не помогло.вот мой сценарий:
<script>
$(document).ready(function () {
var secretholder = $('#secret_from_holder');
var visibleholder = $('#type_data_holder');
var select = $('select#TypeValueID');
select.change(function () {
var value = $('select#TypeValueID option:selected').val();
switch (value) {
case '1':
var tohide = visibleholder.html();
visibleholder.children().remove();
var toshow = secretholder.html();
secretholder.children().remove();
secretholder.append(tohide);
visibleholder.append(toshow);
$.validator.unobtrusive.parseDynamicContent('div.firm');
break;
case '2':
var tohide = visibleholder.html();
visibleholder.children().remove();
var toshow = secretholder.html();
secretholder.children().remove();
secretholder.append(tohide);
visibleholder.append(toshow);
$.validator.unobtrusive.parseDynamicContent('div.person');
break;
}
});
});
</script>
вот моя скрытая часть вне формы, в которую я переключаюсь:
<div id="secret_from_holder" style="display: none">
@if (Model.TypeValueID == Constants.Crm.Customer.Types.FIRM_VALUE_ID)
{
<div class="person">
<div class="editor-label">
@Html.LabelFor(model => model.Person.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Person.Name)
@Html.ValidationMessageFor(model => model.Person.Name)
</div>
<div class="clear"></div>
<div class="editor-label">
@Html.LabelFor(model => model.Person.BirthDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Person.BirthDate)
@Html.ValidationMessageFor(model => model.Person.BirthDate)
</div>
<div class="clear"></div>
</div>
}
else
{
<div class="firm">
<div class="editor-label">
@Html.LabelFor(model => model.Firm.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Firm.Name)
@Html.ValidationMessageFor(model => model.Firm.Name)
</div>
<div class="clear"></div>
<div class="editor-label">
@Html.LabelFor(model => model.Firm.BankAccountNumber)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Firm.BankAccountNumber)
@Html.ValidationMessageFor(model => model.Firm.BankAccountNumber)
</div>
<div class="clear"></div>
<div class="editor-label">
@Html.LabelFor(model => model.Firm.Tax)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Firm.Tax)
@Html.ValidationMessageFor(model => model.Firm.Tax)
</div>
<div class="clear"></div>
<div class="editor-label">
@Html.LabelFor(model => model.Firm.EuTax)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Firm.EuTax)
@Html.ValidationMessageFor(model => model.Firm.EuTax)
</div>
<div class="clear"></div>
<div class="editor-label">
@Html.LabelFor(model => model.Firm.TradeNumber)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Firm.TradeNumber)
@Html.ValidationMessageFor(model => model.Firm.TradeNumber)
</div>
<div class="clear"></div>
</div>
}
</div>
Я действительно застрял здесь, пожалуйста, помогите.
автоматически анализируемая часть (при загрузке страницы) всегда проверяется (даже если она выключена и возвращается снова), но часть, которую я пытаюсь проанализировать вручную, никогда не проверяет