1

看法:

<p>Parent ViewData: @ViewData["Test"]</p>   

@Html.Action("MemberSignup","MemberSignupSurface")

部分视图:

<p>PartialView ViewData: @ViewData["Test"]</p>  

@using (Html.BeginUmbracoForm<MemberSignupSurfaceController>
    ("MemberSignupSubmit", "MemberSignupSurfaceController",FormMethod.Post))
{
    <!-- Some form controls -->
    <input type="submit" value="Signup" />
}

控制器:

public class MemberSignupSurfaceController : SurfaceController
{
    public ActionResult MemberSignup()
    {
        ViewData["Test"] = "From MemberSignup";
        // Do database stuff and create model from that
        return PartialView("MemberSignupView", model);
    }


    [HttpPost]
    public ActionResult MemberSignupSubmit(MemberViewModel model)
    {
        ViewData["Test"] = "From MemberSignupSubmit";

        if (ModelState.IsValid)
        {
             // Redirect to success using TempData
        }
        else
        {
            return CurrentUmbracoPage();
        }                                            
    }       
}

当我的页面加载MemberSignup被调用并且页面显示时

父视图数据:

PartialView ViewData:来自 MemberSignup

然后,当我使用无效输入在部分视图上提交表单时,它不会验证并调用CurrentUmbracoPage()操作MemberSignupSubmit

我得到以下信息:

父 ViewData:来自 MemberSignupSubmit

PartialView ViewData:来自 MemberSignup

如果我@Html.Partial用来渲染我的部分视图,两个视图包都显示提交操作中设置的相同值。

我已经尝试过TempData,但它也不起作用。@Html.Action在我使用渲染部分视图表单时从提交操作返回后,真的没有办法将任何内容传递回部分视图。

我要解决的总体问题是使用数据库中的值填充表单中的下拉列表。使用@Html.Partial不允许我这样做,但有一个工作视图包。

4

1 回答 1

0

我这样做是为了呈现一个包含数据库值的动态下拉列表。也许它会帮助某人。

它是一个音乐播放器,需要一个动态数据库填充菜单来列出播放列表

我制作了一个基本控制器,所有其他控制器都继承自该控制器。在那个基类中,我有一个 PlaylistPopupMenu 操作,它从数据库中获取播放列表列表。

    public PartialViewResult PlaylistPopupMenu()
    {
        try
        {
            return PartialView("_PlaylistPopupMenu", db.GetPlaylists(1).ToList());
        }
        catch (Exception)
        {
            throw;
        }
    }

然后我有一个 _PlaylistPopupMenu 部分视图,如下所示:

@model List<OneMusic.Models.GetPlaylists_Result>
@if (Model.Count > 0)
{
    <li style="height:2px" class="divider"></li>
    foreach (var item in Model)
    {
        <li style="height:30px">@Html.DisplayFor(p => item.Name)
            @Html.ActionLink(item.Name, "AddSong", "Playlist", new { playlistId =       @item.PlaylistId, songId = 1 }, "") 
       </li>
    }
}

这会呈现菜单的动态部分(即播放列表)

最后主页有这个来构建菜单的动态部分:

<ul class="dropdown-menu" style="margin-top:10px"><p class="text-primary" style="margin-left:18px; margin-top:6px">Add To</p>

    <!-- other static menu items here-->

    <li style="margin-top:-60px; height:0px">@Html.Action("PlaylistPopupMenu")</li>
</ul>
于 2014-08-27T15:25:52.440 回答