2012-09-24 58 views
3

我一直在嘗試mvc窗體和jQuery幾天,現在發現了一些有趣的結果。在相同的模式對話框中驗證表單發佈

我有一個在視圖中上傳文件的窗體。一旦表單被提交,我使用模型驗證來確保文件不是空的,它是允許的類型等。如果模型驗證失敗,我可以將模型返回到視圖(同一視圖),並顯示錯誤在驗證總結中很好。這裏是我的代碼:這裏

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

    @using (Html.BeginForm("TestView", "TestController", FormMethod.Post, new { enctype = "multipart/form-data", @id = "ImportFile"})) 
    { @Html.ValidationSummary(false, "") 

     <span id="instructions">Select a File to Import:</span><br />   
     @Html.TextBoxFor(model => Model.UploadedFile, new { style = "width:275px;", type = "file", @id = "UploadedFile", @name = "UploadedFile" }) 
       @Html.ValidationMessageFor(model => Model.UploadedFile) 
     <span style="font-size: 8pt">@Html.CheckBoxFor(model => Model.HeadersIncluded) 
      First Column Includes Headers?</span> 
     <p style="margin-bottom: 7px;"> 
      <input type="submit" name="launchbutton" value="Continue" class="InnerButton"/></p> 
    } 
<div id="UploadPartial"></div> 

和我的控制器方法:

[AcceptVerbs("GET")] 
    public ActionResult TestView() 
    { 
     TestViewModel testModel = new TestViewModel(); 
     testModel.HeadersIncluded = true; 
     return View(testModel); 
    } 

    [AcceptVerbs("POST")] 
    public ActionResult TestView(TestViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 
     else 
     { 
      return View(model); 
     } 
    } 

就這樣,一切都很好,如果模型是有效的,還是不是原來的形式是不受干擾(除了驗證錯誤),我已經能夠局部視圖加載到同一頁面用jQuery的崗位,就像這樣:

$(document).ready(function() { 
    $('#UploadPartial').load('@Url.Content("~/TestController/TestView2")', function() { 
    });  

換句話說,如果該模型是有效的,裝載另一個額外的局部視圖。

那麼我想知道,我可以在模態對話框中做到這一點嗎?換句話說,我可以在模態對話框中打開窗體,提交它,執行模型驗證,然後將結果返回到模態對話框。 。 。

會發生什麼情況,當模型被驗證時,結果會回發到空白頁面。沒有佈局,沒有腳本文件,只是一個包含表單的空白頁面(如果存在驗證錯誤的話)。我試着返回View,PartialView,修改視圖的佈局,添加必要的腳本文件等等。我使用相同的表單代碼(但是在對話框中),並且在提交之後,我可以看到Model Validation確實發生了,如果模型驗證成功或者不成功,我只想簡單地將相同的View或PartialView返回到同一個對話框中,驗證錯誤或其他信息(在模型中),以便我可以繼續下一步(其中將加載另一個視圖)。這是我對於控制器代碼:

[AcceptVerbs("GET")] 
    public ActionResult TestView() 
    { 
     TestViewModel testModel = new TestViewModel(); 
     testModel.HeadersIncluded = true; 
     return PartialView(testModel); 
    } 

    [AcceptVerbs("POST")] 
    public ActionResult TestView(TestViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return PartialView("TestView", model); 

     } 
     else 
     { 
      return PartialView(model); 
     } 
    } 

我試圖返回PartialView,查看,更改的ActionResult到PartialViewResult,但我不能現在局部視圖返回模式對話框的形式是。部分視圖正在返回,但只是一個沒有格式化的空白頁面,而不是我想要的模式對話框。似乎模式對話框消失了,並且所有站點都使用它格式化。

所以我的問題是,這甚至有可能嗎?你能否在模態對話框中提交表單,並將表單提交的結果返回到同一個對話框(在執行模型驗證之後),並且仍然使用必要的腳本文件格式化該網站以處理進一步的jquery 。

謝謝,讓我知道你是否需要任何額外的信息。

+0

我不知道答案,但想知道。任何周圍的專家? – pskk

+0

我面臨同樣的問題。你能解決這個問題嗎? – Salman

回答

0

我通常在對話框div中有內容div,並讓jQuery從部分視圖中填充內容div。

您也可以使用Ajax.BeginForm助手,將UpdateTargetId設置爲content div。

當窗體在jQuery對話框中時,另一個問題是你必須在通過Ajax更新內容後重新驗證驗證。像 $ .validator.unobtrusive。解析( 「形式」);