【问题标题】:How to send Ajax request to multiple model class with data parameter?如何使用数据参数向多个模型类发送 Ajax 请求?
【发布时间】:2021-02-19 14:07:37
【问题描述】:

我正在尝试将 Ajax 请求发送到一个控制器操作,该操作将一个类作为包含多个模型的参数。我已经想出了将请求从多个模型发送到一个特定模型的方法。但是我面临的问题是如何为目标模型绑定参数。

请求:

    function EditModalOnComplete() {
        var modelData = { Data: "euro", Type: null, PosNumber: 0, OrderNumber: 0, ServerName: 
        "serverDefualted" }
        var modelName = { "orderModel":modelData}
       $.ajax({
           url: '@Url.Action("SearchResult", "Orders")',
           data:modelName ,
           success: function (){
       },
       error:function (xhr, ajaxOptions, thrownError){
              alert(xhr.responseText);
            }
        });
    }

控制器动作:

   public ActionResult SearchResult(BindedModels models)
    {
 //Code 
return View();
    }

组合模型类

public class BindedModels 
{
    public OrderModel orderModel{ get; set; }
    public DetailsModel details{ get; set; }
}

模型类:

   public class orderModel
    {
        public string  Data{ get; set; }
        public int? Type{ get; set; }
        public int? PosNumber{ get; set; }
        public int? OrderNumber{ get; set; }
        public string ServerName { get; set; }

    }

我想将 modelData 连同请求一起发送到称为 orderModel 的模型,并将这些数据提供给它。我怎样才能做到这一点。当我检查代码时,我确实得到了模型,但它的数据为空。

【问题讨论】:

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


    【解决方案1】:

    我认为您的问题可能是您需要对模型进行字符串化。

    在你的 Ajax 调用中替换它:

    data:model,
    

    有了这个:

    data: JSON.stringify(model),
    

    我假设您的代码示例中有错字,因为您在创建 JS 对象时使用了modelName,但在实际调用中传递了model,除非这是它不起作用的原因,这很可能是案例。

    我还刚刚注意到您缺少请求类型和内容类型:

    type: "POST",
    contentType: "application/json"
    

    所以把它们放在一起:

    $.ajax({
           type: "POST",
           contentType: "application/json",
           url: '@Url.Action("SearchResult", "Orders")',
           data:JSON.stringify(modelName),
           success: function (){
       },
       error:function (xhr, ajaxOptions, thrownError){
              alert(xhr.responseText);
            }
        });
    

    并确保使用[HttpPost] 属性标记控制器的操作:

    [HttpPost]    
    public ActionResult SearchResult(BindedModels models)
    

    【讨论】:

    • 我已经尝试过您提供的解决方案,但现在我将模型设为空?
    • 是的,你是对的,但这个错字是在我的代码中创建帖子时很好
    • @moe1792 我刚刚注意到您也缺少请求类型:type: "POST",
    • 是的,这是正确的,感谢您的重播,但是当我放置断点时,我确实收到了请求,我得到了 orderModel 的对象,但它的属性为空。因此,如果这就是原因,我会感到惊讶,但我会试一试。顺便说一句,我发送的数据不是 JSON,而是发送模型
    • 对不起,但这不是原因我已经尝试了所有建议的解决方案
    【解决方案2】:

    修复 ajax:

    function EditModalOnComplete() {
    
            var modelData ={ orderModel: { Data: "euro", Type: null, PosNumber: 0, 
    OrderNumber: 0, ServerName: "serverDefualted" }, details: {} };
            
           $.ajax({
               url:  "/Orders/SearchResult",
               data:modelData ,
               success: function (){
           },
           error:function (xhr, ajaxOptions, thrownError){
                  alert(xhr.responseText);
                }
            });
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2012-03-08
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多