我有一個創建,查看這樣的...如何禁用ASP.NET MVC 3中的HttpPost操作中的驗證?
<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())
{
@Html.ValidationSummary(null, new { @class = "validation" })
...
<input class="cancel" type="submit" value="OK" />
...
<input name="submit" type="submit" value="Save" />
}
...以及相應的控制器動作:
[HttpPost]
public ActionResult Create(string submit, MyViewModel myViewModel)
{
if (submit != null) // true, if "Save" button has been clicked
{
if (ModelState.IsValid)
{
// save model data
return RedirectToAction("Index");
}
}
else // if "OK" button has been clicked
{
// Disable somehow validation here so that
// no validation errors are displayed in ValidationSummary
}
// prepare some data in myViewModel ...
return View(myViewModel); // ... and display page again
}
我發現,我可以通過設置class="cancel"
禁用客戶端驗證在「確定」按鈕上。這工作正常。
但是,服務器端驗證仍然發生。有沒有一種方法可以在控制器操作中禁用它(請參閱上面「創建」操作中的else-block)?
謝謝你的幫忙!
這是相同的強類型視圖,所以我認爲我不能使用另一個ViewModel。 – Slauma 2011-05-18 17:46:09
@Slauma並非整個案例。你有一個單獨的視圖,使用模型X,可能擁有所有的驗證屬性。您可以創建模型Y,將模型X複製並粘貼到並刪除所有驗證屬性。此時您需要有2個獨立的表單發佈操作。所以創建(X)和TempSave(Y)。在TempSave(Y)結束時,您要麼重定向到原始操作(如果它可以加載臨時保存數據),或者您需要返回View(X),您可以輕鬆地將Y變爲X像ValueInjecter這樣的映射框架。 – 2011-05-18 17:51:44
然後,您可以將javascript綁定到提交按鈕,該按鈕可以將表單的目標從TempSave更改爲Create。 – 2011-05-18 17:52:46