![](/img/trans.png)
[英]asp.net mvc httpPost Return View(“Action”, Model) is not working to show validation error
[英]How to disable validation in a HttpPost action in ASP.NET MVC 3?
我有這樣的創建視圖......
<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"
來禁用客戶端驗證。 這很好用。
但是,服務器端驗證仍然會發生。 有沒有辦法在控制器操作中禁用它(請參閱上面的Create操作中的else-block)?
謝謝你的幫助!
我最近有類似的問題。 我想從驗證中排除一些屬性並使用以下代碼:
ModelState.Remove("Propertyname");
隱藏可以使用的錯誤消息
ModelState.Clear();
但問題是,如果您不使用這些值,為什么要提交這些值? 您是否最好使用重置按鈕重置表單中的值:
<input type="reset" value="Reset Form">
因此,如果您的提交字符串中沒有任何內容,您希望它忽略檢查模型狀態是否有效並假設它是。
但是它仍在繼續檢查您的驗證並通過驗證摘要顯示在客戶端。
如果你真的不在乎這種情況下的錯誤試試
ModelState.Clear()
並刪除所有錯誤。
服務器端驗證必須位於MyViewModel類中。 您可以使用不實現驗證的其他類嗎? ViewModel中的數據注釋負責將ModelState.IsValid設置為false。
現在,我有這個想法:
...
else // if "OK" button has been clicked
{
ModelState.Clear();
}
...
事實上,我不再在ValidationSummary中收到消息了。 這是否有任何缺點或不良副作用? 至少我現在看不到問題......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.