2016-04-01 5 views
2

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

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

Charges

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

Multiple Descriptions

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

Updated Description

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

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

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

Charges.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); 
    } 
} 

В Review.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

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

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

UPDATE 2

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

MVC pass model between Parent and Child Window

ответ

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); 
    } 

Позвольте мне знать, у вас есть вопросы ..

+0

@Siva ... Можете ли вы сказать мне, как .. – Ziggler

+0

@ Шива ... Большое спасибо за вашу помощь. На самом деле недавно наша команда разработчиков внесла изменения в нашу инфраструктуру и исключение $ .ajax throws, поэтому мне нужно использовать ShowMatchingDescriptions() в моей Review.js. Не могли бы вы дать мне знать, как я могу это сделать – Ziggler

+0

@ Ziggler. Извините. Я не знаком с Review.js –