开发者

ASP.NET MVC: Server Validation & Keeping URL paramters when returning the view

I currently have the following code for the POST to edit a customer note.

 [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditNote(Note note)
    {
        if (ValidateNote(note))
        {
            _customerRepository.Save(note);
            return RedirectToAction("Notes", "Customers", new { id = note.CustomerID.ToString() });
        }
        else
        {
            var _customer = _customerRepository.GetCustomer(new Customer() { CustomerID = Convert.ToInt32(n开发者_JS百科ote.CustomerID) });
            var _notePriorities = _customerRepository.GetNotePriorities(new Paging(), new NotePriority() { NotePriorityActive = true });

            IEnumerable<SelectListItem> _selectNotePriorities = from c in _notePriorities
                                                                select new SelectListItem
                                                                {
                                                                    Text = c.NotePriorityName,
                                                                    Value = c.NotePriorityID.ToString()
                                                                };

            var viewState = new GenericViewState
            {
                Customer = _customer,
                SelectNotePriorities = _selectNotePriorities
            };

            return View(viewState);
        }


    }

If Validation fails, I want it to render the EditNote view again but preserve the url parameters (NoteID and CustomerID) for something like this: "http://localhost:63137/Customers/EditNote/?NoteID=7&CustomerID=28"

Any ideas on how to accomplish this?

Thanks!


This action is hit by using a post. Wouldn't you want the params to come through as part of the form rather than in the url?

If you do want it, I suppose you could do a RedirectToAction to the edit GET action which contains the noteId and customerId. This would effectively make your action look like this:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditNote(Note note)
{
    if (ValidateNote(note))
    {
        _customerRepository.Save(note);
        return RedirectToAction("Notes", "Customers", new { id = note.CustomerID.ToString() });
    }

    //It's failed, so do a redirect to action. The EditNote action here would point to the original edit note url.
    return RedirectToAction("EditNote", "Customers", new { id = note.CustomerID.ToString() });
}

The benefit of this is that you've removed the need to duplicate your code that gets the customer, notes and wotnot. The downside (although I can't see where it does it here) is that you're not returning validation failures.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜