查看:
<p>Parent ViewData: @ViewData["Test"]</p>
@Html.Action("MemberSignup","MemberSignupSurface")
PartialView:
<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
被调用且页面显示
父ViewData:
PartialView ViewData:来自MemberSignup
然后,当我使用无效输入在部分视图上提交表单时,它将无法验证,并在操作CurrentUmbracoPage()
中调用MemberSignupSubmit
我得到以下内容:
父ViewData:来自MemberSignupSubmit
PartialView ViewData:来自MemberSignup
如果我使用@Html.Partial
呈现我的局部视图,则两个viewbags都会显示与提交操作相同的值集。
我已经尝试了TempData
,但它也没有用。在使用@Html.Action
渲染部分视图表单时,从提交操作返回后,是否真的无法将任何内容传递回局部视图。
我想解决的整体问题是使用数据库中的值弹出表单中的下拉列表。使用@Html.Partial
不允许我这样做,但有一个工作视图包。
答案 0 :(得分:0)
我这样做是为了使用数据库中的值呈现动态下拉列表。也许它会帮助别人。
这是一个音乐播放器,需要动态数据库填充菜单才能列出播放列表
我制作了一个所有其他控制器继承的基本控制器。在该基类中,我有一个PlaylistPopupMenu操作,它从db获取播放列表列表。
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>