C# Controller data to JavaScript But when using RETURN JSON Modal Disappears/ Refresh ajax modal 成功后
C# Controller data to JavaScript But when using RETURN JSON Modal Disappears/ Refresh ajax modal after success
我的模态中有一些数据想传递给 javascript。当我使用“return json”时确实有效,但我失去了我的模态。我不再能够对我使用的模式进行任何控制。它只是变成一个空的模态。在我的 ajax complete im 猜测中,也许我可以在我的部分视图中重新加载控件,或者以 return json.
以外的其他方式将数据传递给我的 JS
@using (Ajax.BeginForm("CreateSQcontact", "Service", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "ajaxContact", OnSuccess = "contactSuccess" }))
{
<div class="modal" id="AddSQcontact" tabindex="-1" role="dialog" aria-labelledby="lblAjaxContact" aria-hidden="true" style="z-index:1060;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 class="text-center"><b>Create Contact</b></h3>
</div>
<div class="modal-body" id="ajaxContact">
@Html.Partial("SQcontact")
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
<input type="submit" class="btn btn-success" value="Create Contact" />
</div>
</div>
</div>
</div>
}
function contactSuccess(data) {
if (data.Status == "Created") {
$("#AddSQcontact").modal("hide");
var modalX = $('#' + data.Modal);
var newObj = data.Object;
var custDDL = modalX.find('.modal-body').find('#ServiceVM_CustomerName').val();
var sn2DDL = modalX.find('.modal-body').find('#ServiceVM_SN2').val();
var partI = displayContactsDDL(custDDL, sn2DDL, modalX, newObj);
}
}
function displayContactsDDL(customer=null, sn2=null, modalID=null, newObj=null) {
return $.ajax({
url: '@Url.Action("SearchContactsList", "Service")',
data: { customer: customer, sn2: sn2 },
dataType: 'json',
}).done(function (data) {
var dropdown = modalID.find('.modal-body').find('#ServiceVM_ContactName');
dropdown.empty();
$.each(data, function () {
dropdown.append(
$('<option></option>').val(this.Value).html(this.Text)
);
});
if ($.isNumeric(newObj)) {
dropdown.val(newObj);
displayContactData(newObj, modalID)
}
});
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateSQcontact(ServiceModel model)
{
string action = "";
ServiceModel serviceModel = TempData["ServModel"] == null ? serviceModel = new ServiceModel() : TempData["ServModel"] as ServiceModel;
ModalResponse myData = null;
if (TempData["MR"] != null)
{
TempData["MR"] = TempData["MR"] as ModalResponse;
myData = TempData["MR"] as ModalResponse;
}
if (ModelState.IsValid)
{
int customerID = 0;
var numericPhone = "";
if(model.ServiceContact.ContactPhone != null)
{
numericPhone = new string(model.ServiceContact.ContactPhone.Where(char.IsNumber).ToArray());
}
if(model.ServiceContact.ContactCustomer != null)
{
customerID = context.Customers.Where(c => c.Name == model.ServiceContact.ContactCustomer)
.Select(x => x.ID).FirstOrDefault();
}
var contact = new Serv_Contacts()
{
Contact = model.ServiceContact.ContactName,
Phone = model.ServiceContact.ContactPhone,
Email = model.ServiceContact.ContactEmail,
SN2 = model.ServiceContact.ContactSN2,
CustomerID = customerID
};
context.Serv_Contacts.Add(contact);
context.SaveChanges();
ModelState.Clear();
if(myData != null)
{
//myData.Object = contact.Contact;
myData.Object = contact.Contact_ID;
TempData["MR"] = myData as ModalResponse;
}
serviceModel = LoadVirtualService(serviceModel);
TempData["ServModel"] = serviceModel;
//ModalResponse parameter = TempData["MR"]==null ? parameter=new ModalResponse() : TempData["MR"] as ModalResponse;
//myData = myData == null ? myData = new ModalResponse() : myData;
myData = myData ?? (myData = new ModalResponse());
return Json(myData, JsonRequestBehavior.AllowGet);
string serializedData = JsonConvert.SerializeObject(myData);
// return new HtmlString(serializedData.ToString());
}
serviceModel = LoadVirtualService(serviceModel);
TempData["ServModel"] = serviceModel as ServiceModel;
return PartialView("SQcontact", serviceModel);
}
这是我的解决方案,我成功了!
CONTROLLER
myData = myData ?? (myData = new ModalResponse());
string serializedData = JsonConvert.SerializeObject(myData);
ViewBag.SMR = serializedData;
return PartialView("SQcontact", serviceModel);
VIEW
@Html.Hidden("SMRdata", (object)ViewBag.SMR)
JAVASCRIPT
function contactSuccesses() {
var modalC = $('#AddSQcontact');
///var txtContactName = modalC.find('.modal-body').find('#ServiceContact_ContactName').val();
var txtsmrdata = modalC.find('.modal-body').find('#SMRdata').val();
var jsonObj = JSON.parse(txtsmrdata);
var modalX = "", status = "", objID = 0;
if (jsonObj != null || jsonObj != "") {
status = jsonObj.Status;
if (jsonObj.Modal != "") {
modalX = $('#' + jsonObj.Modal);
}
if (jsonObj.Object != 0) {
objID = jsonObj.Object;
}
}
if (status == "Created") {
// alert('in here');
if (modalX != "") {
var custDDL = modalX.find('.modal-body').find('#ServiceVM_CustomerName').val();
var sn2DDL = modalX.find('.modal-body').find('#ServiceVM_SN2').val();
var nextPart = true;
}
if (nextPart) {
displayContactsDDL(custDDL, sn2DDL, modalX, objID);
}
}
}
我的模态中有一些数据想传递给 javascript。当我使用“return json”时确实有效,但我失去了我的模态。我不再能够对我使用的模式进行任何控制。它只是变成一个空的模态。在我的 ajax complete im 猜测中,也许我可以在我的部分视图中重新加载控件,或者以 return json.
以外的其他方式将数据传递给我的 JS @using (Ajax.BeginForm("CreateSQcontact", "Service", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "ajaxContact", OnSuccess = "contactSuccess" }))
{
<div class="modal" id="AddSQcontact" tabindex="-1" role="dialog" aria-labelledby="lblAjaxContact" aria-hidden="true" style="z-index:1060;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 class="text-center"><b>Create Contact</b></h3>
</div>
<div class="modal-body" id="ajaxContact">
@Html.Partial("SQcontact")
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
<input type="submit" class="btn btn-success" value="Create Contact" />
</div>
</div>
</div>
</div>
}
function contactSuccess(data) {
if (data.Status == "Created") {
$("#AddSQcontact").modal("hide");
var modalX = $('#' + data.Modal);
var newObj = data.Object;
var custDDL = modalX.find('.modal-body').find('#ServiceVM_CustomerName').val();
var sn2DDL = modalX.find('.modal-body').find('#ServiceVM_SN2').val();
var partI = displayContactsDDL(custDDL, sn2DDL, modalX, newObj);
}
}
function displayContactsDDL(customer=null, sn2=null, modalID=null, newObj=null) {
return $.ajax({
url: '@Url.Action("SearchContactsList", "Service")',
data: { customer: customer, sn2: sn2 },
dataType: 'json',
}).done(function (data) {
var dropdown = modalID.find('.modal-body').find('#ServiceVM_ContactName');
dropdown.empty();
$.each(data, function () {
dropdown.append(
$('<option></option>').val(this.Value).html(this.Text)
);
});
if ($.isNumeric(newObj)) {
dropdown.val(newObj);
displayContactData(newObj, modalID)
}
});
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateSQcontact(ServiceModel model)
{
string action = "";
ServiceModel serviceModel = TempData["ServModel"] == null ? serviceModel = new ServiceModel() : TempData["ServModel"] as ServiceModel;
ModalResponse myData = null;
if (TempData["MR"] != null)
{
TempData["MR"] = TempData["MR"] as ModalResponse;
myData = TempData["MR"] as ModalResponse;
}
if (ModelState.IsValid)
{
int customerID = 0;
var numericPhone = "";
if(model.ServiceContact.ContactPhone != null)
{
numericPhone = new string(model.ServiceContact.ContactPhone.Where(char.IsNumber).ToArray());
}
if(model.ServiceContact.ContactCustomer != null)
{
customerID = context.Customers.Where(c => c.Name == model.ServiceContact.ContactCustomer)
.Select(x => x.ID).FirstOrDefault();
}
var contact = new Serv_Contacts()
{
Contact = model.ServiceContact.ContactName,
Phone = model.ServiceContact.ContactPhone,
Email = model.ServiceContact.ContactEmail,
SN2 = model.ServiceContact.ContactSN2,
CustomerID = customerID
};
context.Serv_Contacts.Add(contact);
context.SaveChanges();
ModelState.Clear();
if(myData != null)
{
//myData.Object = contact.Contact;
myData.Object = contact.Contact_ID;
TempData["MR"] = myData as ModalResponse;
}
serviceModel = LoadVirtualService(serviceModel);
TempData["ServModel"] = serviceModel;
//ModalResponse parameter = TempData["MR"]==null ? parameter=new ModalResponse() : TempData["MR"] as ModalResponse;
//myData = myData == null ? myData = new ModalResponse() : myData;
myData = myData ?? (myData = new ModalResponse());
return Json(myData, JsonRequestBehavior.AllowGet);
string serializedData = JsonConvert.SerializeObject(myData);
// return new HtmlString(serializedData.ToString());
}
serviceModel = LoadVirtualService(serviceModel);
TempData["ServModel"] = serviceModel as ServiceModel;
return PartialView("SQcontact", serviceModel);
}
这是我的解决方案,我成功了!
CONTROLLER
myData = myData ?? (myData = new ModalResponse());
string serializedData = JsonConvert.SerializeObject(myData);
ViewBag.SMR = serializedData;
return PartialView("SQcontact", serviceModel);
VIEW
@Html.Hidden("SMRdata", (object)ViewBag.SMR)
JAVASCRIPT
function contactSuccesses() {
var modalC = $('#AddSQcontact');
///var txtContactName = modalC.find('.modal-body').find('#ServiceContact_ContactName').val();
var txtsmrdata = modalC.find('.modal-body').find('#SMRdata').val();
var jsonObj = JSON.parse(txtsmrdata);
var modalX = "", status = "", objID = 0;
if (jsonObj != null || jsonObj != "") {
status = jsonObj.Status;
if (jsonObj.Modal != "") {
modalX = $('#' + jsonObj.Modal);
}
if (jsonObj.Object != 0) {
objID = jsonObj.Object;
}
}
if (status == "Created") {
// alert('in here');
if (modalX != "") {
var custDDL = modalX.find('.modal-body').find('#ServiceVM_CustomerName').val();
var sn2DDL = modalX.find('.modal-body').find('#ServiceVM_SN2').val();
var nextPart = true;
}
if (nextPart) {
displayContactsDDL(custDDL, sn2DDL, modalX, objID);
}
}
}