将视图从一个控制器传递到另一控制器的视图

时间:2019-02-04 19:19:54

标签: c# asp.net-mvc

是否可以将另一个控制器的视图传递给第一个控制器的视图?我有带view1的controller1。我需要从view1调用另一个controller2操作方法,并将view2传递给视图1中的div。

我尝试了@html.Action("action","controller")。这称为控制器2,但未将view2传递给view1。

我做错了吗?我该怎么办?

3 个答案:

答案 0 :(得分:0)

您可以使用此示例。我没有将其放入ASP.NET Fiddle中,因为我们正在处理两个视图。

First的Controller / ViewModel

namespace Testy20161006.Controllers
{
    //I'm showing how to pass data from one Controller Action to another Controller Action.
    //With the data you can render your second view however you like with the data.
    //We pass data NOT views.  You could use a partial view, but I am showing the most basic way.
    public class NewbieDevViewModel
    {
        public String DataToPassToNewControllerAction { get; set; }
    }

    public class HomeController : Controller
    {
        //I am using Tut145 for my first Controller/Action/View, but you could have called it Index
        [HttpPost]
        public ActionResult Tut145(NewbieDevViewModel passedData)
        {
            //passing simple string, so I can pass it using my QueryString
            return RedirectToAction("MyAction2", "Home2", new { passedData = passedData.DataToPassToNewControllerAction });
        }

        public ActionResult Tut145()
        {
            return View();
        }

第一观点

@model Testy20161006.Controllers.NewbieDevViewModel
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Tut145 - View 1</title>
   </head>
<body>
    @using (Html.BeginForm())
    {
        @Html.LabelFor(r=>r.DataToPassToNewControllerAction)
        @Html.TextBoxFor(r => r.DataToPassToNewControllerAction, new { @Value = "ValueOfData" })
        <input type="submit" value="Submit data - to send to new Controller Action" />
    }
</body>
</html>

第二个控制器

namespace Testy20161006.Controllers
{
    public class Home2Controller : Controller
    {
        //I named my Controller Home2 and Action MyAction2, but you can name it anything you want
        public ActionResult MyAction2(string passedData)
        {
            //reconstruct the ViewModel and pass into second view
            NewbieDevViewModel viewModel = new NewbieDevViewModel { DataToPassToNewControllerAction = passedData };
            return View(viewModel);
        } 

第二视角

@model Testy20161006.Controllers.NewbieDevViewModel
@{
    Layout = null;
}
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>MyAction2 </title>
</head>
<body>
    <div>
        - Final View - I passed data into here from different Controller Action -and-
        I can render this page anyway I which
    </div>
    <p/>
    @Html.LabelFor(r => r.DataToPassToNewControllerAction)
    @Html.TextBoxFor(r => r.DataToPassToNewControllerAction)
</body>
</html>

答案 1 :(得分:0)

局部视图可用于在另一个视图内部渲染视图。在控制器2中为操作创建局部视图。从控制器1的视图中调用该局部视图。 这是示例:

第一个控制器:

public class Controller1Controller : Controller
{
    public ActionResult Edit()
    {
        return View();
    }
 }

第一个控制器视图:

@using (Html.BeginForm())

{     @ Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Controller 1 View</h4>
    <hr />
    <h1>Fisrt Controller</h1>
    <div>
        @{
            Html.RenderAction("GetSubject", "Controller2");
        }
    </div>               
</div>

}

第二个控制器:

 public class Controller2Controller : Controller
 {       
    public ActionResult GetSubject()
    {
        Subject s = new Subject() { id = 2, SubjectName = "XYZ" };
        return PartialView(s);
    }        
 }

第二个控制器视图:

<div>
    <h4>Controller 2 view</h4>
<hr />
    <h1>Second Controller</h1>
</div>

答案 2 :(得分:0)

花了一些时间在代码上并进行了一些谷歌搜索之后,我发现了我的问题。 我从父级视图调用的子操作方法是异步方法,因此我做了如下操作,

父视图

testcase3
testcase3
testcase3

Ajax调用以填充父视图

<div id="childView"></div>

希望对某些人有用。