2010-08-18 63 views
1

我有一個帶有簡單模式彈出窗口的視圖。你點擊一個超鏈接,它彈出窗口,如果你嘗試提交彈出窗體而不填寫任何信息,它會在文本框旁邊顯示相應的驗證錯誤消息。如果關閉模式彈出窗口並再次單擊超鏈接,則當您單擊提交時,似乎不會執行客戶端驗證。它只是讓它被提交,然後它會在服務器端檢查它。爲什麼要打開一個模式彈出窗口然後關閉它,然後重新打開第二次使驗證停止工作?我正在使用在SimpleModal Demos處演示的基本osx模式。任何建議將不勝感激。我已經檢查過該網站,但如果有人有以前的帖子,可能會有所幫助,這將不勝感激。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; } 
} 

回答

2

由於SimpleModal處理模態內容的方式,它聽起來像是失去了驗證綁定。

一個選擇是使用persist:true選項,但您可能想要確保清除任何已填充的表單值。

例如:

$(element).modal({ 
    persist: true, 
    onClose: function (dialog) { 
     var modal = this; 
     $('input, textarea', dialog.data[0]).val(''); 
     modal.close(); 
    } 
}); 
+1

這正是它。我開始觀看Visual Studio如何顯示打開的「腳本文檔」,並且我的第一次打開模式時會出現MicrosoftAjax.js和MicrosoftMvcValidation.js的調用腳本,但在關閉它並第二次打開它之後兩個腳本文件將不再出現。所以失去綁定是有道理的。如果綁定僅在頁面加載時發生,而不是在打開模式時發生,那麼每次打開模式時都必須將驗證重新綁定到模式,以便使用驗證(如果我沒有使用persist選項)? – mattnss 2010-08-19 02:39:51

+0

除非您使用live()或delegate(),否則每次都必須進行重新綁定(不包括persist選項)。這就是onShow回調的目的,你可以把你的綁定代碼放在那裏,它總是被調用。 – 2010-08-19 13:39:31

+1

謝謝Eric,我剛剛意識到我剛剛從SimpleModal的創建者那裏得到了幫助,很好。 – mattnss 2010-08-19 21:34:21

相關問題