【问题标题】:Objects in Model are Null after Post模型中的对象在发布后为空
【发布时间】:2021-01-01 20:32:03
【问题描述】:

在 Index() 中,我返回带有模型 AnlassDetailModel 的视图,其中我有对象 Anlass 和 List<SelectListItem>,它们都填充了数据。
我将此列表用于视图中表单的下拉列表。

但是,当我要提交表单时,对象Anlass 为空,但下拉列表中的变量具有值。

如何获取对象中包含数据的模型?


型号:

public class AnlassDetailModel
{
    public Anlass Anlass { get; set; }
    public List<SelectListItem> Kategories = new List<SelectListItem>();

    public int KategorieId { get; set; }
}

控制器:

public ActionResult Index()
{
    AnlassDetailModel model = new AnlassDetailModel()
    {
        Anlass = Anlass.GetAnlass(),
        Kategories = Kategorie.GetKategorieBezeichnung()
    };
    return View("~/Views/AnlassDetail.cshtml", model);
}

[HttpPost]
public ActionResult Cat(AnlassDetailModel model)
{
    //Here the Model only has value in KategorieId but not in Anlass
    if (model.Anlass.Kategories == null)
        model.Anlass.Kategories = new List<Kategorie>();
    model.Anlass.Kategories.Add(Kategorie.GetKategorieById(model.KategorieId));
    return View("~/Views/AnlassDetail.cshtml", model);
}

查看:

<div>
    @using (Html.BeginForm("Cat", "Anlass", FormMethod.Post))
    {
        @Html.DropDownListFor(m => m.KategorieId, new SelectList(Model.Kategories, "Value", "Text"), "Auswählen")
        <input type="submit" value="Hinzufügen" />
    }
</div>

【问题讨论】:

  • “对象分析为空”。我在您的视图中没有看到任何 Anlass 绑定控件。为什么 Anlass 不应该为空?

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


【解决方案1】:

问题在于数据模型。

当你在第一个请求中传递模型时,你用值填充了模型

  public ActionResult Index()
  {
         AnlassDetailModel model = new AnlassDetailModel()
        {
               Anlass = Anlass.GetAnlass(),
                Kategories = Kategorie.GetKategorieBezeichnung()
         };
        return View("~/Views/AnlassDetail.cshtml", model);
   }

然后将这些数据填充到视图中的控件中,然后当您尝试发布数据时,这是一个新请求,传递的唯一数据是绑定到视图中的控件的数据。

因此,如果您想在发布数据后重新填充数据,那么您需要再次为控件重新填充数据。

  [HttpPost]
  public ActionResult Cat(AnlassDetailModel model)
  {
        AnlassDetailModel model = new AnlassDetailModel()
        {
                Anlass = Anlass.GetAnlass(),
                Kategories = Kategorie.GetKategorieBezeichnung()
          };
         return View("~/Views/AnlassDetail.cshtml", model);
    }

【讨论】:

    【解决方案2】:

    这可能有效。代替它。您必须保存它才能将其发送到数据库。

          [HttpPost]
        public ActionResult Cat(AnlassDetailModel model)
        {
            if (model.Anlass.Kategories == null)
                model.Anlass.Kategories = new List<Kategorie>();
            model.Anlass.Kategories.Add(Kategorie.GetKategorieById(model.KategorieId));
            model.SaveChanges();
            return View("~/Views/AnlassDetail.cshtml", model);
        }
    

    【讨论】:

    • 这不是问题。我什至无法到达那里,因为模型大多是空的。锁定我最近发表的评论
    • “对象分析为空”。我在您的视图中没有看到任何 Anlass 控件。为什么 Anlass 不应该为空?
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多