이미 작업 중 : 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>
그리고 정확히 질문은 무엇인가? –
다음은 작동 중입니다. 부트 스트랩 모달 팝업 방식을 사용하여 모델을 열고 엔터티 2 목록을 전달할 수 있습니다. 테이블에 목록을 표시 할 수 있습니다. –
다음과 같이 작동합니다. 1) 부트 스트랩 모달 팝업 방식을 사용하여 모델을 열고 엔터티 2 목록을 전달할 수 있습니다. 2.) 테이블에 목록을 표시 할 수 있습니다. 그러나 엔티티 1과 엔티티 2 사이에 이미 존재하는 관계에 관계없이 모든 목록을 채 웁니다. 엔티티 2가 이미 엔티티 1과 관련되어 있으면 이러한 객체는 팝업 엔티티 2 테이블 –