Q:

Page with Multiple Submit Buttons and one Get/Post Action Method

I am new to MVC, so please forgive me if I am being so noob :).  
In my new project, I want to make a 'Create Song' page which, of course, creates a new song. In model design, one song can have many artists. So, on the create song page, a user should be able to search for artists and add artists from the search results by pressing the 'Add' links of artists in the search result.
Currently, I have two submit buttons in form which are "Submit" and "SearchArtist" and they call http POST "Create" action method. A ViewModel object(CreateSongScrnData) is used to post the screen data. And it's all working ok. But when I try to add an artist from Artist search result, using @Url.Action passing ViewModel data to "Create" http get method, the viewmodel object parameter is always null when it come into the actiona method. Please help me with some advice and enlighten me if I am missing some concepts. Thank you so much in advance.
Code is as follows.
public ActionResult Create(CreateSongScrnData modelData, Int32? artistIDToAdd)
    {
        if (modelData != null && artistIDToAdd != null)
        {
            var artist = db.Artists.Find(artistIDToAdd);
            modelData.Song.Artists.Add(artist);
        }
        ViewBag.GenreID = new SelectList(db.Genres, "GenreID", "Name");
        ViewBag.AlbumID = new SelectList(db.Albums, "AlbumID", "Name");
        return View(modelData);
    } 

    [HttpPost]
    public ActionResult Create(CreateSongScrnData modelData)
    {
        switch (modelData.SubmitCommand)
        {
            case "AddNewSong":
                if (ModelState.IsValid)
                {
                    db.Songs.Add(modelData.Song);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                break;
            default:
                modelData.SearchResult = db.Artists.Where(a => a.Name.Contains(modelData.ArtistSearchString)).ToList();
                break;
        }
        ViewBag.GenreID = new SelectList(db.Genres, "GenreID", "Name", modelData.Song.GenreID);
        ViewBag.AlbumID = new SelectList(db.Albums, "AlbumID", "Name", modelData.Song.AlbumID);
        return View(modelData);
    }

Code snippet of search in the view is as follows:
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
    <div class="editor-label">
        @Html.LabelFor(model => model.Song.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Song.Name)
        @Html.ValidationMessageFor(model => model.Song.Name)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Song.MyanmarName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Song.MyanmarName)
        @Html.ValidationMessageFor(model => model.Song.MyanmarName)
    </div>

    <div class="editor-label"> 
        @Html.LabelFor(model => model.Song.Genre)
    </div>
    <div>
        @Html.DropDownList("GenreID", "Choose Genre")
        @Html.ValidationMessageFor(model => model.Song.GenreID)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Song.AlbumID, "Album")
    </div>
    <div class="editor-field">
        @Html.DropDownList("AlbumID", "Choose Album")
        @Html.ValidationMessageFor(model => model.Song.AlbumID)
    </div>
    <div class="editor-label"> 
    <p>Sing by this artists:</p>
    @if (Model.AddedArtists != null)
    {
     <table><tr><th>Name</th></tr>
        @foreach (var item in Model.AddedArtists)
        {
                <tr><td>@item.Name</td></tr>
        }
    </table>
    }
    </div>

    <div style=" border-top:1px solid #ccc; width: 400px; height:auto; margin-top:30px; margin-bottom:30px;"></div>
    <div>
        <p>Search and add artists</p>
        @Html.TextBoxFor(model => model.ArtistSearchString)
        <input type="submit" name="SubmitCommand" value="SearchArtist"  class="cancel" />
        @if (Model.SearchResult != null)
        {
            <div> 
                <table><tr><th>Name</th><th></th></tr>
                @foreach (var item in Model.SearchResult)
                {
                    <tr><td>@item.Name</td>
                        <td><a href="@Url.Action("Create", "Song", new { modelData = Model })">Add</a></td>
                     </tr>
                }
                </table>

            </div>
        }
    </div>

     <div style=" border-top:1px solid #ccc; width: 400px; height:auto; margin-top:30px; margin-bottom:30px;"></div>

    <p>
        <input type="submit" name="SubmitCommand" value="AddNewSong" />
    </p>
}

A:

I think you are mixing too things in a single form. 
Solution 1)
Create a first step where user insert data and create song.
Create a second step where user add artists to the song.
Solution 2)
Let to the submit button the function to store data.
For the search of artist use a ajax compnent like this: 
http://harvesthq.github.com/chosen/

