Bob Kaufman
Bob Kaufman

Reputation: 12815

How to Prevent Validators from Running on HttpGet?

After reading this very helpful answer I modified a pair of methods to allow them both to accept the same view model:

[ActionName("AddressCorrection"), HttpGet]
public IActionResult AddressCorrectionGet(AddressCorrectionViewModel model)
{
    return View(model);  // was return View();
}

[ActionName("AddressCorrection"), HttpPost]
[ValidateAntiForgeryToken]
public IActionResult AddressCorrectionPost(AddressCorrectionViewModel model)
{
    if (ModelState.IsValid)
    {
        return View("Index", new ApplicationViewModel { SuccessMessage = "That worked." });
    }

    model.ErrorMessage = "Something went wrong";
    return View(model);
}

Problem is, calling return View(model); in AddressCorrectionGet now treats the invocation as a POST of sorts. Specifically, the validators on AddressCorrection.cshtml run. Instead of seeing a blank form ready for input, I see a form with a bunch of “required fields missing” messages.

How do I prevent the View from running the validators in this case? Or in the more general case, how does the View know that it should vs. should not run validators (I was thinking this was simply based on whether the Request method was GET vs POST. Clearly wrong.), and how can I explicitly tell the view to run or not run the validators?

Upvotes: 2

Views: 70

Answers (1)

Mostafa Esmaeili
Mostafa Esmaeili

Reputation: 178

Use ModelState.Clear(); before return View(model);

Upvotes: 2

Related Questions