【问题标题】:Passing multiple model using Ajax returns null?使用 Ajax 传递多个模型返回 null?
【发布时间】:2021-02-25 20:51:03
【问题描述】:

我正在使用一个包含多个模型的模型。我还使用 AJAX 请求将数据发送到操作。动作的参数包含包含多个模型的模型类型。主模型中的每个子模型都为空。我怎样才能解决这个问题。 型号:

public class MainModel
{
  public SubModel1 sub1 {get;set;}
  public SubModel2 sub2 {get;set;}
}

请注意 SubModel1 和 SubModel2 包含如下属性:1.Id、Name。 2. ID,位置。 控制器

public ActionResult PostData(MainModel main)
{
return View();
}

查看:

@model project.Models.MainModel
@using (Ajax.BeginForm("PostData", "ControllerMain",
                    new AjaxOptions()
                    {
                        HttpMethod = "POST",
                    }))
                    {
                        @Html.TextBoxFor(model => model.sub1.Id, new { @Value = "1"})
                        @Html.TextBoxFor(model => model.sub1.Name, new { @Value = "user1"})
                        @Html.TextBoxFor(model => model.sub2.Id, new { @Value = "1"})
                        @Html.TextBoxFor(model => model.sub2.Location, new { @Value = "UK"})
                      <button type="submit" class="btn btn-primary" id="SaveData">Save</button>
                    } 

当我使用调试器检查 main 时,我得到两个模型的值为 null。我怎样才能解决这个问题。如果我将 PostData 的参数更改为 SubModel1 或 SubModel2,以下可能会很有用。我确实获取了数据,但事实并非如此,因为我想获取多个模型的数据。

【问题讨论】:

    标签: c# ajax asp.net-mvc


    【解决方案1】:

    如下更改您的模型:

    public class MainModel
    {
        public MainModel()
        {
            sub1 = new SubModel1();
            sub2 = new SubModel2();
        }
        public SubModel1 sub1 { get; set; }
        public SubModel2 sub2 { get; set; }
    }
    

    你的控制器应该是这样的:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        public ActionResult PostData()
        {
            return View(new MainModel());
        }
    
        [HttpPost]
        public ActionResult PostData(MainModel model)
        {
            return View(model);
        }
    }
    

    和视图:

    @model project.Models.MainModel@using (
    Ajax.BeginForm("PostData", "Home",
        new AjaxOptions()
        {
            HttpMethod = "POST",
        }))
        {
            @Html.TextBoxFor(model => model.sub1.Id, new { @Value = "1"})
            @Html.TextBoxFor(model => model.sub1.Name, new { @Value = "user1"})
            @Html.TextBoxFor(model => model.sub2.Id, new { @Value = "1"})
            @Html.TextBoxFor(model => model.sub2.Location, new { @Value = "UK"})
            <button type="submit" class="btn btn-primary" id="SaveData">Save</button>
        } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 2015-09-02
      相关资源
      最近更新 更多