簡體   English   中英

如何在ASP.NET MVC 3中的HttpPost操作中禁用驗證?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM