简体   繁体   English

如何 map JSON object 查看 model class 在 ASP.NET MVC 使用 Ajax

[英]How to map JSON object to view model class in ASP.NET MVC using Ajax

I have problems mapping a JSON object to a class in ASP.NET MVC.我在将 JSON object 映射到 ASP.NET MVC 中的 class 时遇到问题。

I am sending an object using Ajax and controller receives null - please help me.我正在使用 Ajax 发送 object,controller 收到 null - 请帮助我。

Here is my view:这是我的观点:

@model List<Ahmed_Solution.Models.ViewModel>

@{
    Layout = null;
}

<!DOCTYPE html>
@{
    Layout = null;
}

<div class="modal-footer">
    <script>
        class Client {
            constructor(ntn, strn, first_name, last_name, address, phone, score) {
                this.NTN = ntn;
                this.STRN = strn;
                this.First_Name = first_name;
                this.Last_Name = last_name;
                this.Address = address;
                this.Phone = phone;
                this.Score = score;
            }
        }

        class Greidge
        {
            constructor(greidge_number, width,greidge_date,weaving_unit,gsm,quality,construction,quantity,unit,rolls)
            {
                this.greidge_number = greidge_number;
                this.greidge_Date = greidge_date;
                this.width = width;
                this.weaving_unit = weaving_unit;
                this.gsm = gsm;
                this.quality = quality;
                this.construction = construction;
                this.quantity = quantity;
                this.unit = unit;
                this.rolls_count = rolls;
            }
        }

        class Greidge_Client {
            constructor(gr, glist, lastgrnum, cl, clist, cnamelist, gquality, gqlist) {
                this.gr = gr;
                this.glist = glist;
                this.lastgrnum = lastgrnum;
                this.cl = cl;
                this.clist = clist;
                this.cnamelist = cnamelist;
                this.gquality = gquality;
                this.gqlist = gqlist;
            }
        }

        class Greidge_Quality {
            constructor(gquality) {
                this.gquality = gquality;
            }
        }
                                           
        function SubmitArraytoController()
        {
            var gr_number = $('#greidge_number').val();
            var gr_Date = document.getElementById("greidge_date").value;
            var party_ntn = $('#party_ntn').find(":selected").val()
            var party_name = $('#party_ntn').find(":selected").text();
            var gr_quality = $('#greidge_quality').find(":selected").val();
            var greidge_width = $('#greidge-width').val();
            var greidge_construction = $('#greidge-construction').val();
            var greidge_weaving_unit = $('#greidge-weaving-unit').val();
            var greidge_gsm = $('#greidge-gsm').val();
            var greidge_quantity = $('#greidge-quantity').val();
            var greidge_rolls = $('#greidge-rolls').val();
            var greidge_unit = $('#greidge-unit').find(":selected").val();

            var gr1 = new Greidge(gr_number, gr_Date, greidge_width, greidge_weaving_unit, greidge_gsm, gr_quality, greidge_construction, greidge_quantity, greidge_unit, greidge_rolls);
            var cl1 = new Client(party_ntn, "", party_name, "", "", "", "", "");
            var gql = new Greidge_Quality(gr_quality);

            var json_object = { 'viewmodel': new Greidge_Client(gr1, [], gr_number, cl1, [], [], gql, []) }
            //debugger;
            console.log(json_object)
            console.log(JSON.stringify(json_object));

            $.ajax({
                    contentType: 'application/json; charset=uf-8',
                    type: "POST",
                    url: "@Url.Action("SubmitGreidgeDetails", "Greidge")",
                    datatype: 'json',
                    data: JSON.stringify(json_object),
                    traditional: true
            });
        }
    </script>

    <input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel">
    <button id="Save-Greidge" class="btn bg-gradient-primary" onclick="SubmitArraytoController()">Save Data</button>
</div>

Here is my model class:这是我的 model class:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

namespace Ahmed_Solution.Models
{
    public class ViewModel
    {
        string constr = @"Data Source=hb.cvx9jeq87dws.ap-northeast-1.rds.amazonaws.com,1433;Initial Catalog=Hassan;User ID=Hammad;Password="12345";
        public Greidge gr = new Greidge();
        public List<Greidge> glist = new List<Greidge>();
        public Double lastgrnum;
        public Client cl = new Client();
        public List<Client> clist = new List<Client>();
        public List<Client> cnamelist = new List<Client>();
        public Greidge_Qualities gqlty = new Greidge_Qualities();
        // Fabric_Recieving fr = new Fabric_Recieving();
        public List<Greidge_Qualities> gqlist = new List<Greidge_Qualities>();

        public List<ViewModel> GetGreidgeDetails()
        {
            SqlConnection con = new SqlConnection(constr);
            List<ViewModel> vlist = new List<ViewModel>();
            
            SqlCommand com = new SqlCommand("GetAllGriedgeDetails", con);
            com.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter(com);
            DataTable dt = new DataTable();
            con.Open();
            da.Fill(dt);
            con.Close();
            ViewModel vm = new ViewModel();

            vm.cnamelist = cl.GetAllClientNames();
            vm.gqlist = gqlty.GetAllQualityNames();
            vm.lastgrnum = gr.GetLastGreidgeNumber();

            // Bind EmpModel generic list using dataRow     
            foreach (DataRow dr in dt.Rows)
            {
                vm.cl.First_Name = dr["First_Name"].ToString();
                vm.cl.Last_Name = dr["Last_Name"].ToString();
                vm.gr.greidge_Date = Convert.ToDateTime(dr["Griedge_Date"].ToString());
                vm.gr.greidge_number = dr["Greidge_Number"].ToString();
                vm.gr.width = Convert.ToInt32(dr["Greidge_Width"].ToString());
                vm.gr.quality = dr["Quality"].ToString();
                vm.gr.construction = dr["Construction"].ToString();
                vm.gr.weaving_unit = dr["Weaving_Unit"].ToString();
                vm.gr.gsm = Convert.ToInt32(dr["GSM"].ToString());
                vm.gr.quantity = Convert.ToInt32(dr["Quantity"].ToString());
                vm.gr.unit = dr["Unit"].ToString();
                
                vlist.Add(vm);
            }

            if (vlist.Count == 0)
            {
                vlist.Add(vm);
            }

            return vlist;
        }
    }
}

Here is the controller method:这是 controller 方法:

[HttpPost]
public ActionResult SubmitGreidgeDetails(ViewModel viewmodel)
{
    string name = viewmodel.gr.greidge_number;
    return View("GreidgeDetails", viewmodel.GetGreidgeDetails());
}

Screenshot is attached to illustrate the situation.附上屏幕截图以说明情况。

Thanks in advance提前致谢

You can see view model object is null here你可以在这里看到视图model object是null

Try the below尝试以下

[HttpPost]
    public ActionResult SubmitGreidgeDetails([FromBody]ViewModel viewmodel)
        {
            string name = viewmodel.gr.greidge_number;
            return View("GreidgeDetails", viewmodel.GetGreidgeDetails());
        }
  //I used below code to post form data, worked properly.          

                   $.ajax({
                     url: '/Batch/UpdateBatch',
                     type: "Post",
                     data: JSON.stringify(model),
                     dataType: "json",
                     contentType: "application/json"

                 }).done(function (response) {
                     if (response.success === true) {
                        //do stuff after success
                     }
                     else {
                     }
                 }).fail(function (response) {
                     //do stuff after failed
                 });

//In controller //在控制器中

[HttpPost]
public virtual async Task<JsonResult> SaveBatch(BatchViewModel model)
{
try
{
    var batch = await _batchService.CreateBatch(model);


    if (batch.Result)
    {
        return Json(new { success = batch.Result, message = batch.Message }, JsonRequestBehavior.AllowGet);
    }
    else
    {
        return Json(new { success = batch.Result, message = batch.Message }, JsonRequestBehavior.AllowGet);
    }
}
catch (Exception ex)
{
    return Json(new { success = false, message = ex.Message }, JsonRequestBehavior.AllowGet);
}

} }

change json_object更改 json_object

 var json_object =  new Greidge_Client(gr1, [], gr_number, cl1, [], [], gql, []) ;

and action和行动

    [HttpPost]
    public ActionResult SubmitGreidgeDetails([FromBody]ViewModel viewmodel)

Hi I have Inserted Data Using FormCollection instead of using Ajax您好,我使用 FormCollection 插入数据而不是使用 Ajax

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用Ajax传递模型对象以在Asp.Net MVC中查看 - How To Pass Model Object To View in Asp.Net MVC Using Ajax Save jQuery JSON object into SQL table without creating View model class in MVC ASP.NET Core - Save jQuery JSON object into SQL table without creating View model class in MVC ASP.NET Core 如何将JSON对象转换为Asp.Net MVC中的类 - How to convert JSON object to class in Asp.Net MVC 如何使用视图模型在asp.net mvc 5中进行编辑? - how to edit in asp.net mvc 5 using view model? 如何使用$ .ajax和asp.net MVC发布FileReader对象 - How to post FileReader object using $.ajax and asp.net MVC 如何在 asp.net mvc 视图中使用 javascript 访问 json object 中的数组长度 - How to access length of an array in a json object using javascript in asp.net mvc view ASP.NET MVC-将包含数组的FormData映射到模型类 - ASP.NET MVC - Map FormData containing array to model class 使用ASP.NET MVC和JSON.Net获取视图中的所有对象json数据 - get all object json data in view using ASP.NET MVC and JSON.Net ASP.NET MVC AJAX 模型的虚拟 object 是 null - ASP.NET MVC AJAX model's virtual object is null 反序列化从 Ajax 传递到 Z9E0DA8438E1E38A1C30F4B76CE73B8 的 JSON object - Deserializing the JSON object passed from Ajax to ASP.NET MVC
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM