0

기본적으로 임베디드 필드에서, MVC/ASP.net에서 배우기, 배우기.Many Many Popup

대다수의 관계가있는 엔티티가 2 개 있습니다. 그것은 잘 작동 내가 체크 박스를 사용하여 싸우는

제목 관계 내기

을 할당 할 수 있어요.

enter image description here

나는 다음 구현하려는 :

에이 목록이 링크링크 해제 버튼 표에 나와 상대 법인이 법인 1를, 페이지를 만듭니다. 이미지 아래

찾기 : enter image description here

링크 버튼을 엔티티 1와 관련이없는 법인이 목록을 보여줍니다 팝업을 엽니 다.

enter image description here 사용자 제출 버튼을 '확인란 및 프레스를 사용하여 필요한 법인이을 선택합니다. 제출 버튼을 누르면에

는 선택한 법인 2 개체가 생성보기 및 팝업 닫히고의 ** 법인 2 ** 테이블에 추가됩니다.

On 저장보기 만들기는 관계가있는 모든 것을 저장합니다.

너무 많이 묻지 않기를 바랍니다. 판단 할 수 없습니다.

미리 감사드립니다.

+0

그리고 정확히 질문은 무엇인가? –

+0

다음은 작동 중입니다. 부트 스트랩 모달 팝업 방식을 사용하여 모델을 열고 엔터티 2 목록을 전달할 수 있습니다. 테이블에 목록을 표시 할 수 있습니다. –

+0

다음과 같이 작동합니다. 1) 부트 스트랩 모달 팝업 방식을 사용하여 모델을 열고 엔터티 2 목록을 전달할 수 있습니다. 2.) 테이블에 목록을 표시 할 수 있습니다. 그러나 엔티티 1과 엔티티 2 사이에 이미 존재하는 관계에 관계없이 모든 목록을 채 웁니다. 엔티티 2가 이미 엔티티 1과 관련되어 있으면 이러한 객체는 팝업 엔티티 2 테이블 –

답변

0

이미 작업 중 : 1) 부트 스트랩 모달 팝업 방식을 사용하여 모델을 열고 엔터티 2 목록을 전달할 수 있습니다. 2.) 테이블에 목록을 표시 할 수 있습니다.

을 달성하기 1) 메인 뷰에 2 엔티티 테이블에없는 개체 팝업 뷰 2 엔티티리스트를 채우기.

2) 선택란의 팝업 테이블에 확인란이 있습니다.

3) 컨트롤러에 게시하지 않고 선택한 엔티티 2 행 세부 정보를 기본보기로 가져옵니다.

4) 기본보기에서 엔터티 2 테이블을 선택한 행으로 업데이트하십시오.

5) 저장 버튼을 누르면 테이블에 저장됩니다.

엔티티 1 :

public partial class JobPost 
{ 
    public JobPost() 
    { 
     this.JobTags = new HashSet<JobTag>(); 
    } 

    public int JobPostId { get; set; } 
    public string Title { get; set; } 

    public virtual ICollection<JobTag> JobTags { get; set; } 
} 

엔티티 2 :

public partial class JobTag 
{ 
    public JobTag() 
    { 
     this.JobPosts = new HashSet<JobPost>(); 
    } 

    public int JobTagId { get; set; } 
    public string Tag { get; set; } 

    public virtual ICollection<JobPost> JobPosts { get; set; } 
} 

public class TempJobTag 
{ 
    public int JobTagId { get; set; } 
    public string Tag { get; set; } 
    public bool isSelected { get; set; } 
} 

보기 모델 :

public class JobPostViewModel 
{ 
    public JobPost JobPost { get; set; } 
    public IEnumerable<SelectListItem> AllJobTags { get; set; } 

    private List<int> _selectedJobTags; 
    public List<int> SelectedJobTags 
    { 
     get 
     { 
      if (_selectedJobTags == null) 
      { 
       _selectedJobTags = JobPost.JobTags.Select(m => m.JobTagId).ToList(); 
      } 
      return _selectedJobTags; 
     } 
     set { _selectedJobTags = value; } 
    } 
} 

엔티티 1 개 컨트롤러 :

// GET: JobPosts/Create 
    public ActionResult Create() 
    { 
     var jobPostViewModel = new JobPostViewModel 
     { 
      JobPost = new JobPost(), 
     }; 

     if (jobPostViewModel.JobPost == null) 
      return HttpNotFound(); 

     var allJobTagsList = db.JobTags.ToList(); 
     jobPostViewModel.AllJobTags = allJobTagsList.Select(o => new SelectListItem 
     { 
      Text = o.Tag, 
      Value = o.JobTagId.ToString() 
     }); 

     return View(jobPostViewModel); 
    } 

    // POST: JobPosts/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(JobPostViewModel jobpostView) 
    { 
     if (ModelState.IsValid) 
     { 
      var newJobTags = db.JobTags.Where(
        m => jobpostView.SelectedJobTags.Contains(m.JobTagId)).ToList(); 
      var updatedJobTags = new HashSet<int>(jobpostView.SelectedJobTags); 

      foreach (JobTag jobTag in db.JobTags) 
      { 
       if (!updatedJobTags.Contains(jobTag.JobTagId)) 
       { 
        jobpostView.JobPost.JobTags.Remove(jobTag); 
       } 
       else 
       { 
        jobpostView.JobPost.JobTags.Add((jobTag)); 
       } 
      } 

      db.JobPosts.Add(jobpostView.JobPost); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(jobpostView); 
    } 

    public ActionResult ViewJobPostTagPopUp() 
    { 
     var allJobTagsList = db.JobTags.ToList(); 

     foreach (JobTag jobTag in db.JobTags) 
     { 
      if (jobTag.JobTagId == 1) 
      { 
       allJobTagsList.Remove(jobTag); 
      } 
     } 

     List<TempJobTag> tmpJobTags = new List<TempJobTag>(); 

     foreach (JobTag jobTag in db.JobTags) 
     { 
      TempJobTag tmpJT = new TempJobTag(); 
      tmpJT.Tag = jobTag.Tag; 
      tmpJT.JobTagId = jobTag.JobTagId; 
      tmpJobTags.Add(tmpJT); 
     } 

     return PartialView("JobTagIndex", tmpJobTags); 
    } 

    [HttpPost] 
    //[ValidateAntiForgeryToken] 
    public JsonResult ViewJobPostTagPopUp(List<TempJobTag> data)  
    { 
     if (ModelState.IsValid) 
     { 
     } 

     return Json(new { success = true, message = "Some message" }); 
    } 
,

홈페이지보기 :

@model MVCApp20.ViewModels.JobPostViewModel 

@{ 
ViewBag.Title = "Create"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Create</h2> 

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 

<div class="form-horizontal"> 
    <h4>JobPost</h4> 
    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.JobPost.Title, htmlAttributes: new  { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.JobPost.Title, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.JobPost.Title, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.AllJobTags, "JobTag", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.ListBoxFor(m => m.SelectedJobTags, Model.AllJobTags) 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default"  /> 
     </div> 
    </div> 
</div> 
} 

<div> 
@Html.ActionLink("+", "ViewJobPostTagPopUp", "JobPosts", 
null, new { @class = "modal-link btn btn-success" }) 
</div> 

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

<script src="~/Scripts/jquery-2.1.1.min.js"></script> 
<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

    <script type="text/javascript"> 

</script> 
@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 

부분 팝업보기 :

@model IEnumerable<MVCApp20.Models.TempJobTag> 
@{ 
ViewBag.Title = "Index"; 
//Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Tags</h2> 

@using (Html.BeginForm()) 
{ 
<table id="datatable" class="table"> 
    <tr> 
     <th> 
      <input type="checkbox" id="checkAll" /> 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Tag) 
     </th> 
     <th></th> 
    </tr> 
    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @*@Html.EditorFor(modelItem => item.isSelected)*@ 
       <input type="checkbox" class="checkBox" 
         value="@item.isSelected" /> 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Tag) 
      </td> 
     </tr> 
    } 
</table> 
@*<div> 
    @Html.ActionLink("Done", "ViewJobPostTagPopUp", "JobPosts", 
    null, new { @class = "modal-link btn btn-primary" }) 
</div>*@ 

<div> 
    <button type="submit" id="btnSubmit" class=" btn btn-primary">Submit</button> 
</div> 
} 

<script> 
$(document).ready(function() { 

    $("#checkAll").click(function() { 
     $(".checkBox").prop('checked', 
      $(this).prop('checked')); 
    }); 
}); 

$(function() { 
    $('#btnSubmit').click(function() { 
     var sdata = new Array(); 
     sdata = getSelectedIDs(); 
     var postData = {}; 
     postData[values] = sdata; 

     $.ajax({ 
      url: '@Url.Action("ViewJobPostTagPopUp")', 
      type: "POST", 
      type: this.method, 
      //data: $(this).serialize(), 
      data: JSON.stringify(product), 

      success: function (result) { 
       alert("success"); 
      }, 
      fail: function (result) { 
       alert("fail"); 
      } 
     }); 

     //alert("hiding"); 
     //$('#modal-container').modal('hide'); 
    }); 
}); 

function getSelectedIDs() { 
    var selectedIDs = new Array(); 
    var i = 0; 
    $('input:checkbox.checkBox').each(function() { 
     if ($(this).prop('checked')) { 
      selectedIDs.push($(this).val()); 
      i++; 
      alert("got" + i); 
     } 
    }); 

    return selectedIDs; 
} 
</script>