我一直在嘗試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 。
謝謝,讓我知道你是否需要任何額外的信息。
我不知道答案,但想知道。任何周圍的專家? – pskk
我面臨同樣的問題。你能解決這個問題嗎? – Salman