약간의 문제와 내가 몹시 싫어하는 일. 기본적으로 내 viewModel에 데이터를 배치하는 양식이 있습니다. 문제는 고객 회사가 하나의 주소에 있지만 연락처가 다른 주소에 있다고 가정합니다. 사용자가 작성하는 기본 양식의 라디오 버튼을 클릭하고 주소록에 다른 주소를 입력 할 수있게하려면 이것을 기본 폼에있는 모델에 저장하십시오.MVC3 형식 jQuery PartialView
나는 다음을 수행하는 컨트롤러가 있습니다
[HttpPost]
public ActionResult Edit(ClientModel client)
{
Domain.Data.EFDbContext context = new Domain.Data.EFDbContext();
if (ModelState.IsValid)
{
client.ClientAddress.AddressTypeId = client.AddressType.AddressTypeId;
client.Contact.ContactTypeId = client.ContactType.ContactTypeID;
//Add the address to the ContactAddress table and Contact ID
if (client.ContactAddress.AddressLine1 != null)
{
client.Contact.ContactAddress.Add(client.ContactAddress);
context.Contacts.Add(client.Contact);
}
else
{
client.ContactAddress = client.ClientAddress;
}
client.Company.Address.Add(client.ContactAddress);
client.Company.CompanyContact.Add(client.Contact);
//The attachment to Client is created on a Trigger in the database when a new Company is added
context.Companies.Add(client.Company);
context.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(client);
}
}
이 잘 작동, 그것은 내 데이터베이스 테이블을 업데이트하고 결과를 저장,하지만 나는 client.ContactAddress 부분에 추가 한 때문에이를 알고 있다면 필드가 양식에서 비어있는 경우 회사 주소를 클라이언트가있는 곳에 할당하고 관련 필드에 저장합니다. 나는 partialView을 만들려고 한
(이 땅 그냥, 비록 문제가되지 않습니다) 컨트롤러
[HttpGet]
public PartialViewResult AddressPartial()
{
return PartialView("_AddressPartial");
}
에 내 edit.aspx에서 나는
$(document).ready(function() {
$('#Not_Contact_Address').click(function (e) {
if ($('#Not_Contact_Address').is(':checked')) {
$('#dialog').dialog({
autoOpen: false,
width: 400,
resizable: false,
title: 'Add Address',
modal: true,
open: function(event, ui) {
//Load the AddressPartial action which will return
// the partial view _AddressPartial
$(this).load("@Url.Action("AddressPartial")");
},
buttons: {
"Save": function() {
$('#dialog').dialog('close');
},
"Cancel": function() {
$('#dialog').dialog('close');
}
}
});
$('#dialog').dialog('open');
}
});
});
이
기본적으로 사용자가 라디오 버튼을 선택하고 주소 추가 대화 상자가 나타나면 사용자가 해당 정보를 추가 한 다음이 정보를 라디오 엉덩이 아래의 양식에 다시 표시하기를 원합니다. on을 선택하면 계속 진행할 수 있고 Submit 버튼을 한번 완료하면 모든 정보를 데이터베이스에 바로 저장할 수 있습니다. (위의 컨트롤러에 표시됨).
<fieldset>
<legend>Main Contact Details</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Contact.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Contact.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact.FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Contact.LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact.LastName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Contact.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Contact.Phone)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact.Phone)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Contact.Mobile)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact.Mobile)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ContactType.Name)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ContactType.ContactTypeID, Model.ContactSelectList, " --- Select One --- ", null)
</div>
<b>Contact Address</b> same as <b>Company Address</b> @Html.RadioButton("Not_Contact_Address", "Yes") Yes @Html.RadioButton("Not_Contact_Address", "No") No
</fieldset>
문제
나는 괜찮 대화 상자를 열 수 있지만, 나는 오른쪽 상단 모서리에있는 X를 클릭하여 대화 상자를 취소 할 수 있으며,이 후 내 전체 양식을 지 웁니다 및 왼쪽 빈 페이지, 내가 원하는 것은 아닙니다.
양식을 가지고있는 가장 좋은 방법은 사용자가 양식에 정보를 입력하고 페이지에 다른 양식을 표시하여 주소를 추가하고 내가 가진 viewModel에 저장 한 다음 사용자가 계속해라.
이 나를 지금 새 창에서 정보를 저장하고 내 화면으로 다시 돌아갈 수 있습니다
function openProductEditDialog() {
$("#ProductDetailsDialogDiv").html("");
$.ajax({
type: "GET",
url: encodeURI('@Url.Action("AddressPartial", "Home")'),
cache: false,
dataType: 'html',
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#ProductEditDialogDiv").html(XMLHttpRequest.responseText);
},
success: function (data, textStatus, XMLHttpRequest) {
$("#ProductEditDialogDiv").html(data);
},
complete: function (XMLHttpRequest, textStatus) {
$('#ProductEditDialogDiv').dialog({
width: '500px',
modal: true
});
}
});
}
업데이트, 어떤 아이디어는 메인 페이지에이 뷰 모델을 저장하는 방법은 다음과 같습니다. AddressPartial을 폼과 함께 수행 할 수 있고 어떤 정보도 잃지 않도록 호출 된 CreateClient 페이지에서 내 viewModel에 넣길 원합니다.
컨트롤러에서이 점을 지적하고 ContactAddress를 사용하여 viewModel을 다시 CreateClient 페이지로 다시 보내야한다고 생각합니다. 지금이 작업.
같은 페이지에 있으므로 모달 정보를 가져 와서 원래 형식으로 저장하는 것이 가장 쉽지 않을까요? – Maffelu
잘 모름, 사용자로부터 정보를 얻는 방법은 무엇입니까?사용자가 연락처 주소를 추가하면 해당 부분을 표시하는 양식의 숨겨진 부분을 만드시겠습니까? – Nathan
데이터를 표시하거나 표시하십시오. 또 다른 해결책은 모달에 ajax 요청을 사용하여 주소를 저장 한 다음 숨겨진 필드에 주소 키를 저장하는 것입니다. – Maffelu