У меня есть вид с простым модным окном. Вы нажимаете на гиперссылку, она всплывает в окне, и если вы попытаетесь отправить заполненную форму без заполнения какой-либо информации, она отобразит соответствующее сообщение об ошибке проверки рядом с текстовым полем. Если вы закрываете модальное всплывающее окно и снова нажимаете гиперссылку, кажется, что проверка на стороне клиента не выполняется, когда вы нажимаете кнопку submit. Он просто позволяет его отправлять, а затем он будет проверять его на стороне сервера. Почему нужно открыть модальное всплывающее окно, а затем закрыть его, а затем снова открыть второй раз, чтобы проверка работоспособности перестала работать? Я использую базовый osx modal, который показан на SimpleModal Demos. Любые предложения будут ценны. Я проверил вокруг сайта, но если у кого-то есть предыдущий пост, который может быть полезен, это тоже будет оценено.MVC: проверка клиентов перестает работать в всплывающем окне SimpleModal AJAX после открытия и закрытия его один раз
Вот мой частичный вид файла:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NSS.Models.Company>" %>
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<fieldset>
<legend>New Company</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Company_Name)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Company_Name)%>
<%: Html.ValidationMessageFor(model => model.Company_Name)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Company_Phone)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Company_Phone)%>
<%: Html.ValidationMessageFor(model => model.Company_Phone)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Company_Fax)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Company_Fax)%>
<%: Html.ValidationMessageFor(model => model.Company_Fax)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Company_Website)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Company_Website)%>
<%: Html.ValidationMessageFor(model => model.Company_Website)%>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
Это частичное визуализируется в этом блоке .aspx:
<div id='container'>
<div id='content'>
<div id='osx-modal'>
<input type='button' name='osx' value='Demo' class='osx demo'/>
</div>
<!-- modal content -->
<div id="osx-modal-content">
<div id="osx-modal-title">Create a new Company</div>
<div class="close"><a href="#" class="simplemodal-close">x</a></div>
<div id="osx-modal-data">
<h2>Create a new Company</h2>
<% Html.RenderPartial("CreateForm", new NSS.Models.Company()); %>
<p><button class="simplemodal-close">Close</button> <span>(or press ESC or click the overlay)</span></p>
</div>
</div>
</div>
</div>
Вот мой код проверки :
public class Company_Validation
{
[Required(AllowEmptyStrings=false, ErrorMessage = "Company Name is required")]
[StringLength(50, ErrorMessage = "Company Name may not be longer then 50 characters")]
public string Company_Name { get; set; }
}
Это было именно это. Я начал играть, наблюдая за тем, как Visual Studio отображает открытые «Документы сценария», и мои сценарии вызова для MicrosoftAjax.js и MicrosoftMvcValidation.js появятся при первом открытии модального кода, но после его закрытия и открытия его во второй раз два файла сценария перестанут появляться. Так что потеря привязки имеет смысл. Если привязка происходит только при загрузке страницы, а не при открытии модальности, мне нужно будет повторно проверять валидацию на модальный каждый раз, когда она будет открыта, чтобы заставить ее использовать проверку (если я не использовал параметр persist)? – mattnss
Если вы не использовали live() или delegate(), вам придется выполнять переустановку каждый раз (без опции persist). Это то, на что обратный вызов onShow, вы можете поместить туда свой код привязки, и он всегда вызывается. –
Спасибо Эрик, я просто понял, что получил помощь от создателя SimpleModal, хорошо. – mattnss