Denetleyicileri her zamanki gibi kullanabilir ve JsonResult
numaralı ürünü iade edebilirsiniz. Bu yaklaşımı, arama yoluyla dinamik listelere ihtiyaç duyan bazı görünümler için kullanıyorum, ancak web api'ye gitmeye gerek duymuyorum. Öznitelik yönlendirme ile birlikte, MVC
'dan web api benzeri işlevsellik elde edebildim. Örnek senaryo, bazı alanları bir birleşik giriş kutusundan seçilen bir değere göre dolduran bir formum var. Bir kullanıcı bir seçenek belirlediğinde, denetleyicimdeki WebAPI benzeri eylemi aramak için JQuery'yi kullanıyorum.
[RoutePrefix("Pickup")]
[Route("{action=Create}")]
public class PickupController : FrontOfficeAuthorizedController {
[HttpPost]
public JsonResult GetSenderAddress(Guid? addressId) {
if(addreddId != null) {
//Do something to get an address
if(address != null) {
//Only send required info over the wire
return Json(new {
success = true,
address = new {
Address1 = address.Address1,
Address2 = address.Address2,
AddressType = address.AddressType,
CompanyOrName = address.CompanyOrName,
Contact = address.Contact,
Country = address.Country,
PostalCode = address.PostalCode,
Telephone = address.Telephone,
TownCity = address.TownCity,
}
});
}
}
return Json(new { success = false });
}
}
İstemci tarafında javascript'in bir pasajı var.
routes.MapRoute(
"route that matches only GETs for your url",
"your url",
new { controller = "some controller", action = "some action" },
new { httpMethod = new HttpMethodConstraint("GET") });
Bu sizi sağlayacaktır: Ben senin RouteConfig.cs dosyasında JQuery
//Shipfrom properties
self.ShipFromaddressid = ko.observable();
//Update shipfrom address based on id
self.ShipFromaddressid.subscribe(function() { getAddress(); });
var getAddress = function() {
var selectedAddressId = { addressId: self.ShipFromaddressid() };
$.ajax({
url: '@(Url.Action<PickupController>(c=>c.GetSenderAddress(null)))',
type: 'Post',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(selectedAddressId),
success: handleResponse
});
};
var handleResponse = function (data) {
if (data.success) {
//console.log(data.address);
self.ShipFromCompanyOrName((data.address.CompanyOrName) ? data.address.CompanyOrName : "");
self.ShipFromContact((data.address.Contact) ? data.address.Contact : "");
self.ShipFromTelephone((data.address.Telephone) ? data.address.Telephone : "");
self.ShipFromAddress1((data.address.Address1) ? data.address.Address1 : "");
self.ShipFromAddress2((data.address.Address2) ? data.address.Address2 : "");
self.shipfromtowncity((data.address.TownCity) ? data.address.TownCity : "");
self.ShipFromPostalCode((data.address.PostalCode) ? data.address.PostalCode : "");
self.ShipFromCountry((data.address.Country) ? data.address.Country : "");
self.ShipFromAddressType((data.address.AddressType) ? data.address.AddressType : "");
}
};