动态地将控制器和操作分配给局部视图内的表单

时间:2013-03-10 12:28:29

标签: asp.net-mvc asp.net-mvc-4

我有一个场景,我需要在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设置动作和控制器。

这一切都可能吗?非常感谢任何帮助。

1 个答案:

答案 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))
        {
            ...
        }