Asp.net mvc 具有多个提交按钮和一个获取/发布操作方法的页面

Asp.net mvc 具有多个提交按钮和一个获取/发布操作方法的页面,asp.net-mvc,forms,asp.net-mvc-3,Asp.net Mvc,Forms,Asp.net Mvc 3,我是MVC的新手,所以请原谅我的无礼:) 在我的新项目中,我想创建一个“创建歌曲”页面,当然,它可以创建一首新歌。在模型设计中,一首歌可以有很多艺术家。因此,在“创建歌曲”页面上,用户应该能够通过按搜索结果中艺术家的“添加”链接,从搜索结果中搜索艺术家并添加艺术家 目前,我有两个表单中的提交按钮,分别是“提交”和“搜索艺术家”,它们将http POST称为“创建”操作方法。ViewModel对象(CreateSongScrnData)用于发布屏幕数据。一切正常。但是,当我尝试从艺术家搜索结果中添

我是MVC的新手,所以请原谅我的无礼:)

在我的新项目中,我想创建一个“创建歌曲”页面,当然,它可以创建一首新歌。在模型设计中,一首歌可以有很多艺术家。因此,在“创建歌曲”页面上,用户应该能够通过按搜索结果中艺术家的“添加”链接,从搜索结果中搜索艺术家并添加艺术家

目前,我有两个表单中的提交按钮,分别是“提交”和“搜索艺术家”,它们将http POST称为“创建”操作方法。ViewModel对象(
CreateSongScrnData
)用于发布屏幕数据。一切正常。但是,当我尝试从艺术家搜索结果中添加艺术家时,使用
@Url.Action
将ViewModel数据传递给“创建”http get方法,ViewModel对象参数在进入actiona方法时始终为null。请给我一些建议,如果我缺少一些概念,请给我一些启发。事先非常感谢你

代码如下

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);
    }
视图中搜索的代码段如下:

<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>
}
创建
@使用(Html.BeginForm())
{
@Html.ValidationSummary(true)
@LabelFor(model=>model.Song.Name)
@EditorFor(model=>model.Song.Name)
@Html.ValidationMessageFor(model=>model.Song.Name)
@LabelFor(model=>model.Song.MyanmarName)
@EditorFor(model=>model.Song.MyanmarName)
@Html.ValidationMessageFor(model=>model.Song.MyanmarName)
@LabelFor(model=>model.Song.Genre)
@Html.DropDownList(“GenreID”,“选择流派”)
@Html.ValidationMessageFor(model=>model.Song.GenreID)
@Html.LabelFor(model=>model.Song.AlbumID,“Album”)
@Html.DropDownList(“相册ID”,“选择相册”)
@Html.ValidationMessageFor(model=>model.Song.AlbumID)
由这位艺术家演唱:

@if(Model.AddedArtists!=null) { 名称 @foreach(模型中的var项。AddedArtList) { @项目名称 } } 搜索和添加艺术家

@Html.TextBoxFor(model=>model.ArtistSearchString) @if(Model.SearchResult!=null) { 名称 @foreach(Model.SearchResult中的var项) { @项目名称 } }

}
我认为你把太多东西混为一谈了

解决方案1)

创建用户插入数据并创建歌曲的第一步

创建第二步,用户将艺术家添加到歌曲中

解决方案2)

让我们转到submit按钮,选择存储数据的功能

要搜索艺术家,请使用以下ajax组件:


我在您的视图中只看到一个提交按钮。您好,不屑一顾,这只是表单的“搜索艺术家”部分,我刚刚添加了创建页面的完整代码。请看一看。谢谢。:)哇,你链接上的ajax组件太棒了。我认为解决方案1非常适合我。非常感谢你。