我无法在 C# 中使用 Jquery 和 Ajax 从控制器向 Razor 视图发送值

Posted

技术标签:

【中文标题】我无法在 C# 中使用 Jquery 和 Ajax 从控制器向 Razor 视图发送值【英文标题】:I can't send a value to a Razor View from controller using Jquery and Ajax in C# 【发布时间】:2019-12-01 02:39:44 【问题描述】:

我要做的是从控制器返回一个对象,并在剃刀视图中一一读取其所有值。该值从视图到控制器进展顺利;问题是当我尝试从控制器返回它以查看时。我正在使用 ASP.NET、Razor Views (html5)、AJAX 和 JQuery。如果您需要更多相关信息,请告诉我。

这些是我在视图中的三个控件:

        <div class="form-group">
            @Html.LabelFor(model => model.IdProducto, "IdProducto", htmlAttributes: new  @class = "control-label col-md-2" )
            <div class="col-md-10">
                @Html.DropDownList("IdProducto", null, htmlAttributes: new  @class = "form-control" )
                @Html.ValidationMessageFor(model => model.IdProducto, "", new  @class = "text-danger" )
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.CantidadProducto, htmlAttributes: new  @class = "control-label col-md-2" )
            <div class="col-md-10">
                @Html.EditorFor(model => model.CantidadProducto, new  htmlAttributes = new  @class = "form-control"  )
                @Html.ValidationMessageFor(model => model.CantidadProducto, "", new  @class = "text-danger" )
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ValorTotal, htmlAttributes: new  @class = "control-label col-md-2" )
            <div class="col-md-10">
                @Html.EditorFor(model => model.ValorTotal, new  htmlAttributes = new  @class = "form-control"  )
                @Html.ValidationMessageFor(model => model.ValorTotal, "", new  @class = "text-danger" )
            </div>
        </div>

这是我的 JQuery 语句:

    <script type="text/javascript">
        $(function () 
            $('#IdProducto, #CantidadProducto').on('change', function () 
                var IdProducto = $('#IdProducto').val();
                var CantidadProducto = $('#CantidadProducto').val();

                if (CantidadProducto.length > 0) 
                    $.getJSON('@Url.Action("GetProductValue")',  idProducto: IdProducto , function (data) 
                        $.each(data, function (i, item) 
                            $('#ValorTotal').val(( Number(CantidadProducto) * Number(item.Precio) ));
                        );
                    );
                
                else 
                    $('#ValorTotal').val(0);
                ;
            );
        );
    </script>

而且,这是我的控制器代码:

[HttpPost]
        public JsonResult GetProductValue(string idProducto)
        
            Producto producto = db.Producto.Find(Convert.ToInt32(idProducto));

            if (producto == null)
            
                producto = new Producto();
            

            return Json(producto);
        

【问题讨论】:

您是否在 $.getJSON 中跟踪了 data 响应? 我可以用哪种方法代替 $.getJSON ? 【参考方案1】:

$.getJSON 使用 http GET 请求获取数据,而在您的控制器中,您的操作方法是 POST

您可以将其更改为HttpGet 或使用$.post 方法

【讨论】:

以上是关于我无法在 C# 中使用 Jquery 和 Ajax 从控制器向 Razor 视图发送值的主要内容,如果未能解决你的问题,请参考以下文章

JQuery Ajax 发布到 C#

将数据传递到处理程序的 Jquery ajax 不起作用(Asp.net、C#、Jquery)

将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器

如何使用 AJAX (jquery) 将嵌套的对象数组传递和接收到 c# WebMethod 中?

SharePoint Web 部件:无法对 ashx 处理程序进行 jquery ajax 调用

使用 jquery ajax、webservice 和 c# 发送电子邮件