【发布时间】:2014-02-03 23:21:56
【问题描述】:
我有一个带有选项卡布局的视图,以及每个选项卡的表单(使用部分)。我想在每个选项卡的基础上向用户提供反馈,但我的代码也可以重复使用。
所以,父页面:
<div id="detailsLayout">
@using (var tabs = Html.Bootstrap().Begin(new Tabs("TabsId")))
{
@tabs.Tab(Html.LabelFor(m => m.course).ToString())
@tabs.Tab(Html.LabelFor(m => m.baselineData).ToString())
@tabs.Tab(Html.LabelFor(m => m.assessments).ToString())
@tabs.Tab(Html.LabelFor(m => m.groups).ToString())
using (tabs.BeginPanel())
{
<h2>@Html.LabelFor(m => m.course)</h2>
Html.RenderAction("Edit", "Course");
}
using (tabs.BeginPanel())
{
<h2>@Html.LabelFor(m => m.baselineData)</h2>
Html.RenderAction("Edit", "BaselineData");
}
using (tabs.BeginPanel())
{
<h2>@Html.LabelFor(m => m.assessments)</h2>
Html.RenderAction("Edit", "Assessments");
}
using (tabs.BeginPanel())
{
<h2>@Html.LabelFor(m => m.groups)</h2>
Html.RenderAction("Edit", "Groups");
}
}
在每个选项卡上,我都放置了部分通知:
@{
string successMsg = (string)TempData["successMsg"];
string infoMsg = (string)TempData["infoMsg"];
string warnMsg = (string)TempData["warnMsg"];
string errMsg = (string)TempData["errMsg"];
if (errMsg != null && errMsg != "")
{
@Html.Bootstrap().Alert(errMsg).Style(AlertColor.Danger)
}
if (warnMsg != null && warnMsg != "")
{
@Html.Bootstrap().Alert(warnMsg).Style(AlertColor.Warning)
}
if (successMsg != null && successMsg != "")
{
@Html.Bootstrap().Alert(successMsg).Style(AlertColor.Success)
}
if (infoMsg != null && infoMsg != "")
{
@Html.Bootstrap().Alert(infoMsg).Style(AlertColor.Info)
}
}
我希望能够在我的控制器中执行诸如TempData["infoMsg"]="This is a draft copy, you can commit changes by saving or roll back by reverting" 之类的操作,但我只希望它应用于特定视图(选项卡)——使用我当前的方法,所有视图都将显示该消息,因为它指向到TempData。
如何将消息引导到正确的页面?我想过以某种方式添加“forPage”参数,但我不确定如何修改部分以在不使用更多 TempData 的情况下接受它,这不会解决问题。
【问题讨论】:
-
我还应该提到,每个选项卡都有自己独特的 div w/id,并且正在使用 ajax 重新加载以进行提交/恢复/等。发送消息的控制器是子页面(例如
CourseController)而不是父控制器。 -
在 MVC 中可能有一种方法可以做到这一点,但我会用 javascript 的方式来解决这个问题。在页面加载时检查每个选项卡的 errMsg(可能是隐藏的表单值),然后使用 jQuery 更改特定选项卡内的值。
标签: javascript jquery asp.net-mvc twitter-bootstrap tabs