MVC Rest and returning views

2019-08-10 10:22发布

问题:

I'm trying to implement the restful convention on my controllers but am not sure how to handle failing model validation in sending it back to the 'New' view from the Create action.

public class MyController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult New()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(MyModel model)
    {
        if(!ModelState.IsValid)
        {
             // Want to return view "new" but with existing model
        }

        // Process my model
        return RedirectToAction("Index");
    }
}

回答1:

Simply:

[HttpPost]
public ActionResult Create(MyModel model)
{
    if(!ModelState.IsValid)
    {
        return View("New", model);
    }

    // Process my model
    return RedirectToAction("Index");
}


回答2:

Granted I'm not familiar with the REST conventions, so I may be way off here ... (and I couldn't find a source that said that the New() method has to be parameterless in a few minutes googling)

You could change your New() method to

public ActionResult New(MyModel model = null)
{
    return View("New", model);
}

And then in your Create()

    if(!ModelState.IsValid)
    {
         return New(model)
         // Want to return view "new" but with existing model
    }

And check in your New view if a Model is set or not. The New() will still work perfectly without a parameter as it used to.