112

Tôi đã tạo một hàm trong javascript như thế:

function addNewManufacturer() {
       var name = $("#id-manuf-name").val();
       var address = $("#id-manuf-address").val();
       var phone = $("#id-manuf-phone").val();

       var sendInfo = {
           Name: name,
           Address: address,
           Phone: phone
       };

       $.ajax({
           type: "POST",
           url: "/Home/Add",
           dataType: "json",
           success: function (msg) {
               if (msg) {
                   alert("Somebody" + name + " was added in list !");
                   location.reload(true);
               } else {
                   alert("Cannot add to list !");
               }
           },

           data: sendInfo
       });
}

Tôi đã gọi jquery.json-2.3.min.jstập tin script và tôi đã sử dụng nó cho toJSON(array)phương thức.

Trong bộ điều khiển, tôi có Addhành động này

[HttpPost]
public ActionResult Add(PersonSheets sendInfo) {
    bool success = _addSomethingInList.AddNewSomething( sendInfo );

    return this.Json( new {
         msg = success
    });

}

Nhưng sendInfokhi tham số phương thức trở thành null.

Ngươi mâu:

public struct PersonSheets
{
    public int Id;
    public string Name;
    public string Address;
    public string Phone;
}

public class PersonModel
{
    private List<PersonSheets> _list;
    public PersonModel() {
         _list= GetFakeData();
    }

    public bool AddNewSomething(PersonSheets info) {
         if ( (info as object) == null ) {
            throw new ArgumentException( "Person list cannot be empty", "info" );
         }

         PersonSheets item= new PersonSheets();
         item.Id = GetMaximumIdValueFromList( _list) + 1;
         item.Name = info.Name;
         item.Address = info.Address;
         item.Phone = info.Phone;

         _list.Add(item);

         return true;
    }
}

Làm thế nào tôi có thể làm trong phương thức hành động khi dữ liệu được gửi bằng POST?

Tôi không biết cách sử dụng. Ngoài ra, có thể gửi lại phản hồi (tới ajax) qua JSON không?

Cảm ơn bạn

|
  • 2

    Chào mắt rắn. Bạn có thể vui lòng thay đổi câu trả lời được chấp nhận cho câu trả lời của Neha không? Câu trả lời của Praveen Prasad hiện đang bị phá vỡ vì nó (tại thời điểm viết bài) không mã hóa JSON và không đặt tiêu đề Kiểu nội dung JSON. Neha chính xác làm cả hai điều này. Tôi đã thử cả hai câu trả lời.

    – Phan Thế Ngọc 10:33:36 23/01/2017
92

Tạo một mô hình

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string Phone { get; set; }
}

Bộ điều khiển như dưới đây

    public ActionResult PersonTest()
    {
        return View();
    }

    [HttpPost]
    public ActionResult PersonSubmit(Vh.Web.Models.Person person)
    {
        System.Threading.Thread.Sleep(2000);  /*simulating slow connection*/

        /*Do something with object person*/


        return Json(new {msg="Successfully added "+person.Name });
    }

Javascript

<script type="text/javascript">
    function send() {
        var person = {
            name: $("#id-name").val(),
            address:$("#id-address").val(),
            phone:$("#id-phone").val()
        }

        $('#target').html('sending..');

        $.ajax({
            url: '/test/PersonSubmit',
            type: 'post',
            dataType: 'json',
            contentType: 'application/json',
            success: function (data) {
                $('#target').html(data.msg);
            },
            data: JSON.stringify(person)
        });
    }
</script>
|
126
var SendInfo= { SendInfo: [... your elements ...]};

        $.ajax({
            type: 'post',
            url: 'Your-URI',
            data: JSON.stringify(SendInfo),
            contentType: "application/json; charset=utf-8",
            traditional: true,
            success: function (data) {
                ...
            }
        });

và trong hành động

public ActionResult AddDomain(IEnumerable<PersonSheets> SendInfo){
...

bạn có thể liên kết mảng của bạn như thế này

var SendInfo = [];

$(this).parents('table').find('input:checked').each(function () {
    var domain = {
        name: $("#id-manuf-name").val(),
        address: $("#id-manuf-address").val(),
        phone: $("#id-manuf-phone").val(),
    }

    SendInfo.push(domain);
});

Hy vọng điều này có thể giúp bạn.

|
  • 1

    Không phải vì vậy mà việc xâu chuỗi mô hình làm tăng một số lo ngại về bảo mật vì có thể làm xáo trộn dữ liệu và chèn một số lỗ hổng XSS không?

    – Ngô Mạnh Tường 11:28:59 26/05/2014
  • 1

    @ Không có, một điểm cuối (trong trường hợp này là chức năng của bộ điều khiển mvc) KHÔNG BAO GIỜ nên tin tưởng một khách hàng, do đó kiểm tra XSS nên được thực hiện tại máy chủ. Bộ điều khiển chịu trách nhiệm phân tích dữ liệu theo cách chính xác và gửi lại dữ liệu cho người gọi (webapp). Người gọi cũng có thể là một cái gì đó giống như fiddler, hoặc người đưa thư, hoặc có thể là một ứng dụng khác .. Hy vọng điều này có ý nghĩa ..

    – Trịnh Xuân Sơn 09:19:53 10/07/2014
  • 1

    FYI, gửi một bộ ký tự với ứng dụng / json là không hợp lệ. Bộ ký tự chỉ áp dụng cho các loại văn bản / *. application / json là LUÔN LUÔN UTF-8, bất kể tiêu đề nào.

    – Lý Trường Liên 22:50:43 26/09/2014
  • 1

    Khi tôi thay thế dataType bằng contentType trong yêu cầu, nó sẽ hoạt động.

    – Trịnh Mạnh Ðình 01:50:18 06/04/2016
  • 1

    Vấn đề của tôi đã được giải quyết bằng JSON.opesify (), có ai có thể giải thích được tại sao chúng ta cần điều này trong khi nếu ai đó gửi đối tượng json không?

    – Đặng Tấn Khang 06:26:42 11/01/2017
8

Sử dụng JSON.stringify(<data>).

Thay đổi mã của bạn: data: sendInfothành data: JSON.stringify(sendInfo). Hy vọng điều này có thể giúp bạn.

|
  • 1

    Bạn cũng có thể cần phải đặt contentType thành 'application / json'. Một số điểm cuối có thể đoán, nhưng nói với họ đó là JSON đáng tin cậy hơn.

    – Tạ Cao Cường 10:38:53 23/01/2017
0

PersonSheets của bạn có một thuộc tính int Id, Idkhông có trong bài viết, vì vậy việc tạo mô hình không thành công. Biến Id thành nullable (int?) Hoặc gửi ít nhất Id = 0 với POst.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.