2016-04-03 13 views
0

Merhaba ben mükemmel örnekle sorunumu açıklamak ister. Benim bakış bir iki damla çıkışlar var MüşteriAdı ve ben açılır ilgili kişi otomatik olarak yükleyecektir ContactPersonilgili MüşteriAdı müşteri adı seçerseniz başka bir ContactPersonolduğunu. onun gibi basamaklı açılan aşağı.değer MVC4 pop-up pencere kullanarak veri ekledikten sonra açılan iki kez gösteriyor?

i MüşteriAdı seçerseniz varsayalım ve ContactPerson ve ilgili kişi isim listesi i eklemek zorunda anlamına değil seçin. Bu yüzden kişilere yakın bir ekle düğmesi tuttu. ilgili kişi adı listede yoksa ben o açılır pencere olarak kısmi görünümünü açmak ekle düğmesini tıklayın demektir (i bir kısmi görünümü oluşturulur ve açılan pencerede o görünümü diyoruz).

Partial View Popup window

Şimdi ben tüm ayrıntıları girip oluşturmak butonuna tıklayın. db'de değeri kaydedecek ve pop-up pencereyi kapatacağım.Şimdi burada sadece bir sorunum var. Bu, açılır pencereyi kapattıktan sonra ve i seçtiği kişiyi seçtiğimde, değeri iki kez düşürdüğümde ancak db bir kez doğru şekilde kaydedilir. value showing Two times

Yukarıdaki resimde, pop-up penceresini kullanarak değeri ekledikten sonra iki kez görüntülenen değerleri görebilirsiniz. Bu sorun. lütfen bu sorunu gidermek için bana yardımcı olun.

Benim Görünüm Modeli

public class VisitorsViewModel 
    { 
    public Nullable<System.Guid> CustomerID { get; set; } 
    public string CustomerName { get; set; } 
    public Nullable<System.Guid> ContactID { get; set; } 
    public string ContactPerson { get; set; } 
    public string PhoneNo { get; set; } 
    public string MobileNo { get; set; } 
    public string Email { get; set; } 
    public string AlternateEmail { get; set; } 
    } 

ben kısmi görünümü (çocuk görünümü) ve aynı Görünüm Modeli ana görünümde (üst görünüm) hem özelliklerini yarattı.

Benim denetleyicisi kodu açılan pencerede girilir verileri kaydetmek.

public ActionResult ContactPersonPartialView() 
    { 
    ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "DisplayName"); 
    return View("ContactPersonPartialView"); 
    } 
    [HttpPost] 

public JsonResult ContactPersonCreate(VisitorsViewModel VVviewmodel) 
    { 
    ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "DisplayName", VVviewmodel.CustomerID); 
     var ContactIDObj = Guid.NewGuid(); 
     var CustomerContactIDObj = Guid.NewGuid(); 

     var CustomerContactObj = new CustomerContact() 
     { 
      CustomerContactID = CustomerContactIDObj, 
      CustomerID = VVviewmodel.CustomerID, 
      ContactReference = VVviewmodel.ContactPerson, 
      ContactID = ContactIDObj, 
      IsActive = true, 
      IsDeleted = false, 
      CreatedDate = DateTime.Now, 
      EditedDate = DateTime.Now, 
      LastActiveOn = DateTime.Now, 
      RowID = Guid.NewGuid(), 
      CreatedSessionID = Guid.NewGuid(), 
      EditedSessionID = Guid.NewGuid(), 
      OfflineMode = false, 
      OfflineID = Guid.NewGuid() 
     }; 
     var ContactObj = new Contact() 
     { 
      ContactID = ContactIDObj, 
      DisplayName = VVviewmodel.CustomerID.ToString(), 
      PrintName = VVviewmodel.CustomerID.ToString(), 
      Phone1 = VVviewmodel.PhoneNo, 
      Mobile1 = VVviewmodel.MobileNo, 
      Email1 = VVviewmodel.Email, 
      Email2 = VVviewmodel.AlternateEmail 

     }; 

     db.Contacts.Add(ContactObj); 
     db.CustomerContacts.Add(CustomerContactObj); 
     db.SaveChanges(); 
     ModelState.Clear(); 
     return Json(CustomerContactIDObj); 
     } 

My Veli View Code

@Html.Label("Employee Name", new { @class = "control-label" }) 
@Html.DropDownList("EmployeeID", null, "Select", new { @class = "form-control" }) 

@Html.Label("Customer Name", new { @class = "control-label" }) 
@Html.DropDownListFor(model => model.CustomerID, new SelectList(string.Empty, "Value", "Text"), "Please select a Customer", new { @class = "form-control required", type = "text" }) 

@Html.Label("Contact Person", new { @class = "control-label" }) 
@Html.DropDownListFor(model => model.CustomerContactID, new SelectList(string.Empty, "Value", "Text"), "Please select a ContactPerson", new { @class = "form-control", type = "text", id = "CustomerContactID" }) 
      <button id="AddContactPerson">Add </button> 
      <div id="AddNewContactPerson"></div> 

pop-up pencere

$(function() { 
    $('#AddNewContactPerson').dialog({ 
     autoOpen: false, 
     width: 400, 
     height:500, 
     resizable: false, 
     title: 'Add New', 
     modal: true, 
     open: function(event, ui) { 
     $(this).load("@Url.Action("ContactPersonPartialView", "VisitorsForm")"); 
     }, 
     buttons: { 
     "Close": function() { 
     $(this).dialog("close"); 
     } 
     } 
    }); 

     $("#AddContactPerson").click(function() { 
     $("#AddNewContactPerson").dialog("open"); 
     }); 
     }); 

Benim Kısmi Görünüm kodu

açmak için My Ana Görünüm J sorgu kodu
 @Html.Label("Customer Name") 
     @Html.DropDownList("CustomerID", null, "Select", new { @class = "form-control " ,id="Customer"}) 

     @Html.LabelFor(model => model.ContactPerson) 
     @Html.TextBoxFor(model => model.ContactPerson, new { @class = "form-control", type = "text"}) 
     @Html.ValidationMessageFor(model => model.ContactPerson) 

     @Html.LabelFor(model => model.Email) 
     @Html.TextBoxFor(model => model.Email, new { @class = "form-control", type = "text",id="EmailID"}) 
     @Html.ValidationMessageFor(model => model.Email) 


    <script src="~/Scripts/jquery-1.10.4-ui.min.js"></script> 
    <link href="~/Content/jquery-ui-1.10.4.custom.min.css" rel="stylesheet" /> 
    <script src="~/Scripts/jquery-ui-1.8.24.min.js"></script> 
    <script type="text/javascript"> 
    function SaveContact() { 
    debugger; 
    var CustomerID = $("#Customer").val(); 
    var ContactPerson = $("#ContactPerson").val(); 
    var Email = $("#EmailID").val(); 
    var AlternateEmail = $("#AlternateEmail").val(); 
    var PhoneNo = $("#PhoneNo").val(); 
    var MobileNo = $("#MobileNumber").val(); 
    alert(CustomerID); 
    alert(Email); 
    alert(MobileNo); 

    var CustomerContact = { 
     "ContactPerson": '' +ContactPerson+'', "Email": '' +Email+ '', 
     "AlternateEmail": '' +AlternateEmail+ '', "PhoneNo": '' +PhoneNo+ '', 
     "MobileNo": ''+ MobileNo+ '', "CustomerID": ''+CustomerID+'' 
     }; 
    $.post("/VisitorsForm/ContactPersonCreate", CustomerContact, function (data) { 
    $('#CustomerContactID').append($('<option><option>').val(data).text(ContactPerson)); 

     alert("sucess"); 
    }); 
    } 

İnşallah bu sorunu çözmek için bana herhangi bir çözüm sunalım lütfen sorununuzu sizlerle anlatmak için en iyi seviyemi deneyin. Sorunumun çok uzun olduğunu biliyorum ama herhangi biri benim sorunumu anlıyor ve bana çözüm getiriyor.

Peşin teşekkürler ... Kısmi görünümünde

cevap

0

değiştirin

var option = new Option(ContactPerson, data); 
$('#CustomerContactID').append($(option)); 
0

elle bir http POST sonra ContactPerson sona eklendiğini.

Bu yeni iletişim eklenmeden önce ilgili kişi listesini yeniden ana görünümüne neden olur.Kısacası

,

Veri Reloaded (Yeni kişi İçeriği seçeneğini) + Append yeni seçenek = Çift Giriş

senin kısmi görünümü kodu üzerinde

$('#CustomerContactID').append($('<option><option>').val(data).text(ContactPerson)); 

kaldırmayı deneyin.

+0

Ephraim ile

$('#CustomerContactID').append($('<option>option>').val(data).text(ContactPerson)); 

i tüm sayfayı yenileyip tekrar ı müşterinin adını seçmek zorunda kez ben değeri Açılır görüntüleme olmadığını satırı kaldırırsanız temas kişisi var. bunu istemiyorum Bir kez eklerseniz, iletişim kişisi açılır menüsünde değeri bir kez göstermek istersiniz. – Susan

+0

Yani seçenek görünür ancak bir yenilendikten sonra doğru gitti mi? Customercontactid için açılır listeyi nasıl doldurduğunuzu gösterir misiniz? Belki ana görünüm için HttpGet ActionResult? –

+0

No Ephraim Bir kez pop-up penceresini kullanarak değeri ekledim ve pop-up pencereyi kapatıp açılan değeri seçtikten sonra bütün ebeveyn görünümünü yeniledikten sonra tekrar müşteri adını seçtim. açılır pencerenin kullanılması yüktür. Bekle bu satırı çıkardıktan sonra çıktı görüntüsünü göstereceğim. – Susan

İlgili konular