Передача вида от одного контроллера к виду другого контроллера - PullRequest
0 голосов
/ 04 февраля 2019

Можно ли передать вид другого контроллера на вид первого контроллера?У меня есть controller1 с view1.Мне нужно вызвать другой метод действия controller2 из view1 и передать view2 в div в view 1.

Я пытался @html.Action("action","controller").Это вызвало контроллер 2, но не передавало view2 к view1.

Я делаю это неправильно?Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Частичный вид может использоваться для визуализации вида внутри другого вида.Создайте частичное представление для действия в контроллере 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>
0 голосов
/ 06 февраля 2019

Потратив некоторое время на код и немного погуглив, я разобрался в своей проблеме.Дочерний метод действия, который я вызывал из родительского представления, был асинхронным, поэтому я сделал что-то вроде следующего:

Родительское представление

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

Ajax Вызов для заполнения родительского представления

$(document).ready(function () {
    $.ajax({
        type: 'GET',
        url : '@Url.Action(actionName: "ChildAction", controllerName: "ChildController")',
        dataType: "html",
        async:true,
        success: function (result) { $("#childView").html(result); }
        });

 });

Надеюсь, кому-нибудь это пригодится.

0 голосов
/ 05 февраля 2019

Этот пример вы можете использовать.Я не поместил его в скрипту ASP.NET, потому что мы имеем дело с ДВУМ представлением.

Контроллер / Модель представления первого

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...