MVC Rest and returning views

2019-08-10 10:36发布

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");
    }
}

2条回答
爱情/是我丢掉的垃圾
2楼-- · 2019-08-10 11:02

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.

查看更多
走好不送
3楼-- · 2019-08-10 11:03

Simply:

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

    // Process my model
    return RedirectToAction("Index");
}
查看更多
登录 后发表回答