如何在mvc4中使用json返回多个参数?
问题描述:
您好我有我的观点CustomerName
,ContactPerson
,Email
四个字段,MobileNo
如何在mvc4中使用json返回多个参数?
CustomerName
,ContactPerson
被级联下拉列表和Email
和MobileNo
是文本框。
如果我选择CustomerName
相关ContactPerson
会自动加载下载ContactPerson
下载。
如果我选择Contactperson
的ContactPerson
相关Email
和PhoneNo
将在Email
和PhoneNo
文本框自动加载。我完成了所有任务,所有工作都正常。现在我需要的是我希望减少代码。
我的控制器代码
public JsonResult GetCustomers()
{
return Json(db.Customers.ToList(), JsonRequestBehavior.AllowGet);
}
public JsonResult GetContactPersobByCustomerId(string customerId)
{
Guid Id = Guid.Parse(customerId);
var customercontacts = (from a in db.CustomerContacts where a.CustomerID == Id select a);
return Json(customercontacts, JsonRequestBehavior.AllowGet);
}
public JsonResult GetEmailByContactPersonID(Guid CustomerContactId)
{
var ContactID = db.CustomerContacts.Where(i => i.CustomerContactID == CustomerContactId).Select(i => i.ContactID).FirstOrDefault();
var contact1 = (from p in db.Contacts where p.ContactID == ContactID select p).FirstOrDefault().Email1;
if (contact1 == null)
{
var contact2 = (from a in db.Contacts where a.ContactID == ContactID select a).FirstOrDefault().Email2;
contact1 = contact2;
}
return Json(contact1, JsonRequestBehavior.AllowGet);
}
public JsonResult GetPhoneNoByContactPersonID(Guid CustomerContactId)
{
var ContactID = db.CustomerContacts.Where(i => i.CustomerContactID == CustomerContactId).Select(i => i.ContactID).FirstOrDefault();
var mobile1 = (from pn in db.Contacts where pn.ContactID == ContactID select pn).FirstOrDefault().Mobile1;
if (mobile1 == null)
{
var mobile2 = (from a in db.Contacts where a.ContactID == ContactID select a).FirstOrDefault().Mobile2;
mobile1 = mobile2;
}
return Json(mobile1, JsonRequestBehavior.AllowGet);
}
我查看代码
@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" })
@Html.LabelFor(model => model.MobileNo, new { @class = "control-label" })
@Html.TextBoxFor(model => model.MobileNo, new { @class = "form-control", type = "text",disabled = "disabled", @readonly = "readonly" })
@Html.ValidationMessageFor(model => model.MobileNo)
@Html.LabelFor(model => model.Email, new { @class = "control-label" })
@Html.TextBoxFor(model => model.Email, new { @class = "form-control", type = "text" ,disabled = "disabled", @readonly = "readonly" })
@Html.ValidationMessageFor(model => model.Email)
的json代码
<script src="~/Scripts/jquery-ui-1.11.0.js"></script>
<script>
$(function() {
$.ajax(
'@Url.Action("GetCustomers", "VisitorsForm")',{
type: "GET",
datatype: "Json",
success: function (data) {
$.each(data, function (index, value) {
$('#CustomerID').append('<option value="' + value.CustomerID + '">' + value.DisplayName + '</option>');
});
}
});
$('#CustomerID').change(function() {
$('#CustomerContactID').empty();
$.ajax(
'@Url.Action("GetContactPersobByCustomerId", "VisitorsForm")',{
type: "POST",
datatype: "Json",
data: { CustomerID: $('#CustomerID').val() },
success: function (data) {
$('#CustomerContactID').append($('<option></option>').val('').text('Please select'));
$.each(data, function (index, value) {
$('#CustomerContactID').append('<option value="' + value.CustomerContactID + '">' + value.ContactReference + '</option>');
});
}
});
});
});
$("#CustomerContactID").change(function() {
alert("hhh");
$.ajax(
'@Url.Action("GetEmailByContactPersonID", "VisitorsForm")',{
type: "GET",
dataType: "json",
async: false,
data: { CustomerContactID: $("#CustomerContactID").val()
},
error: function (ex) {
alert('Failed to retrieve Email.' + ex);
},
beforeSend: function() {
},
success: function (data) {
$("#Email").val(data);
}
});
});
$("#CustomerContactID").change(function() {
alert("hhh");
$.ajax(
'@Url.Action("GetPhoneNoByContactPersonID", "VisitorsForm")',{
type: "GET",
dataType: "json",
async: false,
data: { CustomerContactID: $("#CustomerContactID").val()
},
error: function (ex) {
alert('Failed to retrieve Email.' + ex);
},
beforeSend: function() {
},
success: function (data) {
$("#MobileNo").val(data);
}
});
});
小号ee我的编码我写了单独的json和jquery,代码为Email
和PhoneNo
。我觉得它不好。我希望缩短我的代码。我想使用json传递多个参数。我想通过Email
和phone
,同时选择ContactPerson
下拉菜单中的ContatcPerson
。它也影响我的应用程序的性能。请任何人为我的问题提供解决方案和建议。
提前谢谢..
答
你为什么不返回从你的控制器对象包含所有你需要的信息?
序列化为Json的任何对象都可以作为JsonResult返回。
你甚至可以做匿名类型,如:
var details = new { email = "[email protected]", phone = "1234567"};
return Json(details);
你只需要一个'$( “#CustomerContactID”)改变(函数(){'它调用一个控制器方法(说)'GetContactPersonDetails() '返回两个值作为匿名对象(请参阅Andreas Pilavakis的回答),然后使用$(“#Email”).val(data.email);''和$(“#Number”)。val(data.phone );' –