সম্পাদনা : 31/10/2017
একই কোড / অ্যাপ্রোচ Asp.Net কোর 2.0 এর জন্যও কাজ করবে । প্রধান পার্থক্যটি হ'ল, এসপ নেট কোরে, ওয়েব এপিআই কন্ট্রোলার এবং এমভিসি নিয়ন্ত্রক উভয়ই একক নিয়ামক মডেলটিতে একত্রিত হয়েছে। সুতরাং আপনার রিটার্নের ধরন IActionResult
বা এর বাস্তবায়নগুলির মধ্যে একটি হতে পারে (প্রাক্তন OkObjectResult
:)
ব্যবহার
contentType:"application/json"
আপনি JSON.stringify
এটি পাঠানোর সময় এটিকে JSON স্ট্রিংয়ে রূপান্তর করতে আপনার পদ্ধতি ব্যবহার করতে হবে,
এবং মডেল বাইন্ডার আপনার শ্রেণীর অবজেক্টে জসন ডেটা বাঁধবে।
নীচের কোডটি সূক্ষ্মভাবে কাজ করবে (পরীক্ষিত)
$(function () {
var customer = {contact_name :"Scott",company_name:"HP"};
$.ajax({
type: "POST",
data :JSON.stringify(customer),
url: "api/Customer",
contentType: "application/json"
});
});
ফলাফল
contentType
সম্পত্তি সার্ভারকে বলে যে আমরা JSON ফর্ম্যাটে ডেটা প্রেরণ করছি। যেহেতু আমরা একটি JSON ডেটা কাঠামো প্রেরণ করেছি, তাই মডেল বাইন্ডিং সঠিকভাবে ঘটবে।
আপনি যদি এজাক্স অনুরোধের শিরোনামগুলি পরিদর্শন করেন তবে আপনি দেখতে পাচ্ছেন যে Content-Type
মানটি সেট করা আছে application/json
।
আপনি যদি স্পষ্টভাবে কনটেন্ট টাইপ নির্দিষ্ট না করে থাকেন তবে এটি ডিফল্ট সামগ্রী প্রকারটি ব্যবহার করবে application/x-www-form-urlencoded;
মন্তব্যে উত্থাপিত অন্যান্য সম্ভাব্য সমস্যাগুলির সমাধান করতে নভেম্বর 2015 এ সম্পাদনা করুন
একটি জটিল বিষয় পোস্ট করা
ধরা যাক আপনার ওয়েব এপিআই অ্যাকশন পদ্ধতির প্যারামিটার হিসাবে আপনার কাছে একটি জটিল ভিউ মডেল বর্গ রয়েছে class
public class CreateUserViewModel
{
public int Id {set;get;}
public string Name {set;get;}
public List<TagViewModel> Tags {set;get;}
}
public class TagViewModel
{
public int Id {set;get;}
public string Code {set;get;}
}
এবং আপনার ওয়েব এপিআই শেষ পয়েন্ট মত
public class ProductController : Controller
{
[HttpPost]
public CreateUserViewModel Save([FromBody] CreateUserViewModel m)
{
// I am just returning the posted model as it is.
// You may do other stuff and return different response.
// Ex : missileService.LaunchMissile(m);
return m;
}
}
এই লেখার সময়, এএসপি.এনইটি এমভিসি 6 হ'ল সর্বশেষতম স্থিতিশীল সংস্করণ এবং এমভিসি 6 এ, ওয়েব এপিআই কন্ট্রোলার এবং এমভিসি উভয় নিয়ামকই Microsoft.AspNet.Mvc.Controller
বেস বর্গ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত ।
ক্লায়েন্ট পক্ষ থেকে পদ্ধতিতে ডেটা প্রেরণ করতে, নীচের কোডটি ঠিকঠাক কাজ করা উচিত
//Build an object which matches the structure of our view model class
var model = {
Name: "Shyju",
Id: 123,
Tags: [{ Id: 12, Code: "C" }, { Id: 33, Code: "Swift" }]
};
$.ajax({
type: "POST",
data: JSON.stringify(model),
url: "../product/save",
contentType: "application/json"
}).done(function(res) {
console.log('res', res);
// Do something with the result :)
});
মডেল বাইন্ডিং কিছু বৈশিষ্ট্যের জন্য কাজ করে, তবে সমস্ত নয়! কেন?
আপনি যদি ওয়েব এপিআই পদ্ধতি প্যারামিটারকে [FromBody]
অ্যাট্রিবিউট দিয়ে সাজান না
[HttpPost]
public CreateUserViewModel Save(CreateUserViewModel m)
{
return m;
}
এবং মডেলটি প্রেরণ করুন (কাঁচা জাভাস্ক্রিপ্ট অবজেক্ট, জেএসএন ফর্ম্যাটে নয়) কনটেন্ট টাইপ সম্পত্তি মান উল্লেখ না করে
$.ajax({
type: "POST",
data: model,
url: "../product/save"
}).done(function (res) {
console.log('res', res);
});
মডেল বাইন্ডিং মডেলের ফ্ল্যাট বৈশিষ্ট্যের জন্য কাজ করবে, যেখানে প্রকারটি জটিল / অন্য ধরণের বৈশিষ্ট্য নয়। আমাদের ক্ষেত্রে, Id
এবং Name
বৈশিষ্ট্যগুলি সঠিকভাবে প্যারামিটারে আবদ্ধ থাকবে m
, তবে Tags
সম্পত্তিটি খালি তালিকা হবে।
আপনি যদি সংক্ষিপ্ত সংস্করণটি $.post
ব্যবহার করেন তবে অনুরোধটি প্রেরণ করার সময় এটি ডিফল্ট সামগ্রী-প্রকারটি ব্যবহার করবে যদি একই সমস্যা দেখা দেয় ।
$.post("../product/save", model, function (res) {
//res contains the markup returned by the partial view
console.log('res', res);
});