我有一个场景,我需要在3个jQuery-UI选项卡中呈现3个不同的表单,表单的结构和它们的模型是相同的,但我需要将表单发布到不同的控制器和Action方法,具体取决于哪个选项卡表单包含在。我创建了一个包含该表单的部分视图。显然,我可以创建3个不同的局部视图发布到3个不同的控制器,但这看起来非常低效。
我想知道是否有可能以某种方式告诉Partial View根据其中包含的标签更改控制器和其中包含的表单发布的操作。
类似的东西:
<div id="tabs">
<ul>
<li><a href="#tabs-1">New Question </a><img src="@Url.Content("~/Content/images/FAQ.png")" /></li>
<li><a href="#tabs-2">New Idea </a> <img src="@Url.Content("~/Content/images/idea.png")" /></li>
<li><a href="#tabs-3">New Bug</a> <img src="@Url.Content("~/Content/images/bug-icon.png")" /></li>
</ul>
<div id="tabs-1">
@Html.Partial("_NewQuestionPartial")//this form posts to: Controller=Home and Action=Question
</div>
<div id="tabs-2">
@Html.Partial("_NewQuestionPartial")//I want this form to post to: Controller=Support and Action=Idea
</div>
<div id="tabs-3">
@Html.Partial("_NewQuestionPartial")//I want this form to post to: Controller=Support and Action=NewBug
</div>
</div>
如果我能以某种方式将变量传递给局部视图,那么我可以使用jQuery设置动作和控制器。
这一切都可能吗?非常感谢任何帮助。
答案 0 :(得分:1)
您可以将ViewBag字段(或者更好的是,ViewModel上的属性)传递给包含控制器名称的部分视图和要发回的视图,然后在视图中将这些值插入到相应的参数中。 BeginForm帮助器。
在主视图中:
@{
<div id="tabs">
<ul>
...
</ul>
<div id="tabs-1">
ViewBag.Controller = "Home";
ViewBag.Action = "Question";
Html.Partial("_NewQuestionPartial");
</div>
<div id="tabs-2">
ViewBag.Controller = "Idea";
ViewBag.Action = "Question";
Html.Partial("_NewQuestionPartial");
</div>
<div id="tabs-3">
ViewBag.Controller = "Idea";
ViewBag.Action = "NewBug";
Html.Partial("_NewQuestionPartial");
</div>
</div>
}
在局部视图中:
@using (Html.BeginForm((string)ViewBag.Action, (string)ViewBag.Controller))
{
...
}