С# MVC Нет отправки объекта передачи между представлениями

Прошу прощения за мои опечатки. Я работаю над доказательством концепции приложения C # ASP.NET MVC, где мне нужно передавать данные между двумя представлениями, когда нет сообщения и получения. Один вид запускает модальный диалог, и мне нужна связь между ними. Мы используем JQuery.

У меня есть представление Charges.cshtml с сеткой данных. Первый столбец таблицы данных может иметь элемент span или элемент link в зависимости от свойства, которое указывает, имеет ли заряд одно или несколько описаний. Вид выглядит следующим образом.

Сборы

Если платеж имеет несколько описаний, пользователь щелкнет соответствующую ссылку с описанием (в данном случае «Описание 2»), и откроется модальное диалоговое окно с различными описаниями, как показано ниже.

Несколько описаний

Теперь в этом модальном диалоге пользователь подтвердит/выберет одно описание. Теперь мне нужно закрыть модальное диалоговое окно и обновить описание выбранного заряда, как показано ниже.

Обновленное описание

Трудная часть здесь заключается в том, как передавать данные между двумя представлениями. Я могу передавать данные через контроллер или через javascript.

Я пробовал различные способы передать выбранный заряд из Charges.cshtml в метод LoadLoanChargeDescriptions в контроллере LoanCharge, например сериализацию json, ViewData, ViewBag, TempData и т. д., но бесполезно. Я могу передавать простые типы данных, такие как int, string, float, но не весь объект. Я чувствую, что мне нужно передать CurrentDescription и Descriptions моему контроллеру, а от них мне нужно перейти к другим частям. Я пытался передать список строк, но не мог понять, как получить к ним доступ в контроллере, так как в моем контроллере я получил 0. Я могу открыть всплывающее окно с несколькими описаниями пользовательского интерфейса (на данный момент просто добавлен текст Hello)

Пожалуйста, смотрите ниже мои фрагменты кода

Заряды.cshtml

@model ChargeViewModel
@using (Html.FAFBeginForm())
{
    <div>
            <table>
                <tbody>
                <tr >                   
                    //.....                     
                    <td>
                        @if(Model.IsMultipleMatch)
                        {
                            var loanCharge = Model as ChargeViewModel;
                            if (loanCharge.IsMultipleMatch == true)
                            {
                                //string vm = @Newtonsoft.Json.JsonConvert.SerializeObject(loanCharge);                                                                             
                                <span>
                                    <a 
onclick="ShowMatchingDescriptions('@Url.Action("LoadLoanChargeDescriptions", "LoanCharge")','', '920','500')">
                                        @loanCharge.Description
                                    </a>
                                </span>    
                             }                        
                        }
                        else
                        {
                            <span>Model.Description</span>
                        }  

                    </td>
                </tr>                     
                </tbody>    
            </table>
    </div> 
}

public class ChargeViewModel
{
  public string Description {get;set;}
  public bool IsMultipleMatch {get;set;}
  public List<string> Descriptions {get;set;}
}

public class LoanChargeController
{
  public ActionResult LoadLoanChargeDescriptions()
  {
      // get data here and pass/work on
      return View("_PartialMultipleMatchPopup", null);
  }
}

В обзоре.js

function ShowMatchingDescriptions(popUpURL, windowProperties, w, h) {
    try {                
        var left = (screen.width / 2) - (w / 2);
        var top = (screen.height / 2) - (h / 2);

        var properties = windowProperties + "dialogwidth:" + w + "px;dialogheight:" + h + "px;dialogtop:" + top + "px;dialogleft:" + left + "px;scroll:yes;resizable:no;center:yes;title:Matching Lender’s Fee;";
        $.when(
        window.showModalDialog(popUpURL, window, properties)
        )
        .then(function (result) {
            var childWindow = result;
        });
    }
    catch (err) {
        alert("Error : " + err)
    }
}

ОБНОВЛЕНИЕ 1

Я обновил свой вопрос и разместил более подробную информацию.

Заранее спасибо.

ОБНОВЛЕНИЕ 2

Пожалуйста, смотрите мое решение по ссылке ниже.

Модель передачи MVC между родительским и дочерним окном


person Ziggler    schedule 01.04.2016    source источник


Ответы (1)


Почему бы вам не использовать AJAX для передачи данных?

    function ChargeViewModel() {
        this.Description ='';
        this.IsMultipleMatch =false;

    }

    var chargeViewModel= new ChargeViewModel();
    var data = JSON.stringify({ 'chargeViewModel': chargeViewModel });

    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'html',
        type: 'POST',
        url: '@Url.Action("LoadLoanChargeDescriptions", "LoanChargeController")',
        data: data,
        success: function (result) {
           //result will be your partial page html output
        },
        failure: function (response) {

        }
    });

Затем вам нужно изменить контроллер следующим образом:

public ActionResult LoadLoanChargeDescriptions(ChargeViewModel chargeViewModel)
  {
      // get data here and pass/work on
      return View("_PartialMultipleMatchPopup", null);
  }

Сообщите мне, что у вас есть вопросы..

person Sivanantham Padikkasu    schedule 01.04.2016
comment
@Siva..Большое спасибо за помощь. На самом деле недавно наша команда архитекторов внесла изменения в нашу структуру, и $.ajax выдает исключение, поэтому мне нужно использовать ShowMatchingDescriptions() в моем Review.js. Не могли бы вы сообщить мне, как я могу сделать это - person Ziggler; 01.04.2016
comment
@Зигглер. Извините, я не знаком с Review.js - person Sivanantham Padikkasu; 01.04.2016
comment
@ Siva .. Я решил .. посмотрите это для моего решения ... stackoverflow.com/questions/36729567/ - person Ziggler; 20.04.2016