【问题标题】:Calling another Controller post method调用另一个控制器 post 方法
【发布时间】:2021-02-28 15:05:10
【问题描述】:

我正在为我的网站使用 ASP.NET MVC 3。

我创建了一个包含“上一个、下一个和保存”按钮的局部视图。我在我的母版页上调用这个局部视图。

我的要求是,无论 View 我是什么,我都必须能够通过将各自的 Model 数据传递给控制器​​操作来调用不同控制器中的不同 Save 方法。

示例

  • 我有 4 步数据输入,每一步都有不同的控制器。
  • 如果我在第 1 步并单击保存表单值应该转到Step1Controller 的操作方法,
  • 如果我在第 2 步,则发帖应致电 Step2Controller

类似这样的:

public ActionResult Save(GenericModel model)
{
    //use reflection to find out model type

    //call appropriate controller action with model

    return RedirectToAction("Create", new { Controller = "Conference", Action = "Create" });
}

将为Master page 上的Save 按钮调用此保存方法。我怎样才能做到这一点?

【问题讨论】:

  • 这听起来像是对控制器和模型概念的潜在误用。为什么单个视图访问多个控制器以获得具有相同模型的表单发布的结果?如果您只需要调用其他函数,请务必在同一个控制器中创建一个函数,但您需要重新评估您在此处尝试执行的操作。每个视图(或部分视图)都应该包装自己的表单并在提交时调用自己的控制器操作。

标签: asp.net-mvc-3 controller http-post


【解决方案1】:

控制器上是否有单独操作的表单?

如果是这样,只需将每个页面上的表单操作设置为指向相关的控制器。所以表格1是

<form method="post" action="/step1controller/action">

表格2是:

<form method="post" action="/step2controller/action">

这能解决你的问题吗?

【讨论】:

  • 我不能给出特定步骤的控制器和动作名称的表单,因为相同的保存按钮将用于所有其他视图。所以它在一个通用控制器中决定,该控制器将进一步调用适当的控制器动作.我想要做的是我的保存按钮将从所有视图中调用每个帖子上的控制器操作,并从那里决定将在哪个控制器上调用哪个保存方法,并将模型传递给该操作。
【解决方案2】:

我会在控制器中创建一个私有方法,并在第一步的每个部分中调用。

private bool Save(GenericModel model)
{
   ......
}

[HttpPost]
public bool SaveStep1(GenericModel model)
{
      this.Save(model);
}

[HttpPost]
public bool SaveStep2(GenericModel model)
{
      this.Save(model);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多