【问题标题】:Passing ViewModel ASP.NET MVC Using Ajax使用 Ajax 传递 ViewModel ASP.NET MVC
【发布时间】:2018-05-11 14:23:22
【问题描述】:

我正在尝试将我的 ViewModel 之一传递给我的 Ajax 函数,但不幸的是,当我在浏览器中转到控制台时,我可以看到它只是检索这样的空字符串 > {CustomerNo: ""} 而不是检索正确像这样的数据> {CustomerNo:“1234”}。谁能指出我正确的方向! 谢谢。

我的 Ajax 函数:

<input type="text" id="CustomerNo" />

<script>
    $(document).ready(function () {
        let OrdreNo = window.localStorage.getItem("pgm");



        $.ajax({
            type: "GET",
            url: "http://xxx/Account/OpenOrdersDetails/" + OrdreNo ,
            dataType: "json",


            success: function (result) {
                alert(result.CustomerNo);



            } //End of AJAX Success function


        });


    });
</script>


这就是我在 JsonResult 中的内容:

[Route("Account/OpenOrdersDetails/{OrdreNo?}")]
public JsonResult OpenOrdersDetails(string OrdreNo)
{

 var bla4 = (from sh in data_2.Sales_Header
                        join h in data_2.Sales_Line on sh.No_ equals h.Document_No_
                        join s in data_2.Salesperson_Purchasers on sh.Salesperson_Code equals s.Code
                        where sh.No_ == OrdreNo
                        && sh.Document_Type == 1
                        select new xxx.Ordre_Open_Details_VM.OrdreSingelLine
                        {

                            OrdrerNo = sh.No_,
                            CustomerNo = sh.Sell_to_Customer_No_,
 Ordredate = sh.Order_Date,}
});

  oodvm.OrdreDetailsSingleLines = bla4.FirstOrDefault();


            return Json(oodvm,JsonRequestBehavior.AllowGet);
}


这是我的 ViewModel:

  public class Ordre_Open_Details_VM
    {   

public OrdreSingelLine OrdreDetailsSingleLines { get; set; }

public class OrdreSingelLine
        {


            public OrdreSingelLine()
            {

            }
            public OrdreSingelLine(string OrdrerNo, string CustomerNo, DateTime Ordredate)
            {


                this.OrdrerNo = OrdrerNo;
                this.CustomerNo = CustomerNo;
                this.Ordredate = Ordredate;


            }

            public string OrdrerNo { get; set; }
            public string CustomerNo { get; set; }
            public DateTime? Ordredate { get; set; }
}


Json 输出:

{"OrdreDetailsSingleLines":{"OrdreNo":"111111","CustomerNo":"22222","Ordredate":"/Date(1525816800000)/"}}

【问题讨论】:

  • 实际上,您在控制台中登录的是您对 OrdreSingleLine 的值,它来自您的 javascript。这不是来自服务器的响应,它是来自您页面上 CustomerNo 字段的值,大概是空白的。我们不知道为什么那是空白的。我们不知道如何/为什么/是否应该填充它。无论哪种方式,这与您的 ajax 调用无关。如果您想查看来自服务器的响应,请改为使用console.log(JSON.stringify(result));
  • 顺便说一句 failure: function (response) { alert(response.responseText); }, 是多余的。 jQuery 的 $.ajax 方法无法识别“失败”这样的选项。您可以在此处查看所有可用选项:api.jquery.com/jquery.ajax
  • data: JSON.stringify(OrdreSingelLine) 也是多余的。根据您的 Route 属性,您的 C# 方法已接受来自 URL 的 OrdreNo 参数。无需发送任何其他数据。
  • @ADyson 当我使用 console.log(JSON.stringify(result)); ,它将正确检索所有数据,但我只希望 OrdreSingelLine ViewModel 中的 CustomerNo 显示在页面上,那么我如何告诉我的成功函数从 OrdreSingelLine ViewModel 中检索 CustomerNo ?!
  • 您应该在成功函数中检索resultsuccess: function (result) { alert(result); ...

标签: c# asp.net ajax asp.net-mvc


【解决方案1】:

要从响应 JSON 中获取客户编号并将其放入您的文本框中,您可以简单地编写(在您的“成功”回调中):

$("#CustomerNo").val(result.OrdreDetailsSingleLines.CustomerNo);

【讨论】:

    猜你喜欢
    • 2018-12-11
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多