是否可以将另一个控制器的视图传递给第一个控制器的视图?我有带view1的controller1。我需要从view1调用另一个controller2操作方法,并将view2传递给视图1中的div。
我尝试了@html.Action("action","controller")
。这称为控制器2,但未将view2传递给view1。
我做错了吗?我该怎么办?
答案 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>
希望对某些人有用。