2016-04-01 39 views
2

Yazım hatalarım için üzgünüm C# ASP.NET MVC uygulamasında, herhangi bir gönderi ve alma olmadığında iki görünüm arasında veri iletmem gerekiyor. Bir görünüm kalıcı bir diyaloğu başlatır ve aralarında iletişime ihtiyacım var. JQuery kullanıyoruz.C# MVC Gönderilen öğeler arasında nesne geçişi yok

Veri ızgarasıyla Charges.cshtml adlı bir görünüm var. Datagrid'in ilk sütunu, şarjın tek veya çoklu tanımlamalara sahip olup olmadığını belirten bir özelliğine bağlı olarak span öğesine veya bir bağlantı elemanına sahip olabilir. Görünüm aşağıdakine benziyor.

Charges

şarj (bu durumda Açıklaması2) karşılık gelen açıklama bağlantısını tıklayın edecektir birden açıklamaları kullanıcıyı vardır ve kalıcı bir iletişim kutusu Şimdi de Multiple Descriptions

altına

gibi çeşitli açıklamalarını gösteren açarsan Bu modal diyalog kullanıcısı bir tanımlamayı onaylayacak/seçecektir. Şimdi burada zor kısmı iki görünüm arasında veri iletmek için nasıl Updated Description

altında gibi seçilen ücret açıklamasını kalıcı iletişim kutusunu kapatın ve güncellemeniz gerekir. Vericiyi denetleyici üzerinden veya javascript ile iletmek için elimden geleni yapıyorum.

Seçili yükü Charges.cshtml'den LoadLoanChargeDescriptions yöntemine json serialize, ViewData, ViewBag, TempData ve benzeri gibi LoanCharge denetleyicisine geçirmenin çeşitli yollarını denedim ama kullanmamayı denedim. Int, string, float gibi basit veri tiplerini aktarabilirim, fakat tüm nesne değil. CurrentDescription ve Açıklamalarımı denetleyicime aktarmam gerektiğini ve onların diğer parçalara geçmem gerektiğini hissediyorum. Dizgiler Listesini geçmeye çalıştım ancak denetleyicide 0 olarak saydığım için denetleyiciye nasıl erişileceğini göremedim. Ben

benim kodu için lütfen aşağıya bakın

Charges.cshtml

pasajlarını
@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 olarak (tıpkı Merhaba metin eklendi şimdilik) çoklu açıklamaları UI açılır pencere açamaz duyuyorum
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) 
    } 
} 

GÜNCELLEME 1

Sorumu güncelledim ve daha fazla ayrıntı yayınladım.

Şimdiden teşekkürler.

GÜNCELLEME 2

linki aşağıda benim çözüm için bakınız. veri aktarmak için

MVC pass model between Parent and Child Window

cevap

1

Neden AJAX kullanmıyorsun?

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) { 

     } 
    }); 

Sonra böyle denetleyicisi değiştirmek zorunda:

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

Beni sorunuz bildirin .. nasıl

+0

@Siva ... Eğer .. – Ziggler

+0

lütfen bana @ Siva..Sizin için çok teşekkür ederim. Son zamanlarda mimarlık ekibimiz çerçevemize değişiklikler yaptı ve $ .ajax istisnası atar, bu yüzden Review.js'mde ShowMatchingDescriptions() işlevini kullanmam gerekir. Bana – Ziggler

+0

@ Ziggler gibi nasıl yapabilirim? Üzgünüz. Review.js –