tags:

views:

24

answers:

1

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(note.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&amp;CustomerID=28"

Any ideas on how to accomplish this?

Thanks!

A: 

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.

Dan Atkinson
You're right. A brain fart on my end. Thanks for giving me the spark I needed. It's coming through the form now and it's working. Thanks!
Mike
Excellent. Glad to help.
Dan Atkinson