I'd do that with AJAX. The lifecycle would be:
- Show the Invoice form for its creation: you can not add rows to it yet, because it is not saved and therefore it has no persistent object attached to it yet
- Save the invoice: reload the form. Now you can start adding rows
- When you add a row, you invoke the InvoiceItem/Create action via Javascript passing it the invoice ID and all the remaining data that need to be filled
- When the AJAX action returns, you reload the part of the page that renders the Invoice Items (by calling InvoiceItem/Index/ action and rendering its results), so you reflect the recent changes
To create or edit the item, you could use a javascript popup like lightbox, which will make the page look cleaner.
I implemented this for attachments, and works great, and is very clean.