代码之家  ›  专栏  ›  技术社区  ›  LiamB

ASP.NET MVC-空白模型不返回空白数据

  •  4
  • LiamB  · 技术社区  · 15 年前

    我有一个表单,用户也可以用他们想要的数据填写X次。表单将发布到以下操作。

            [HttpPost]
            public ActionResult Manage(ProductOptionModel DataToAdd)
            {
                if (!ModelState.IsValid)
                {
                    return View(DataToAdd);
                }
    
                var ProdServ = new ProductService();
    
                if (DataToAdd.ID != 0)
                {
                    //Edit Mode.
                    DataToAdd = ProdServ.EditProductOption(DataToAdd);
                    ViewData["Message"] = "Option Changes Made";
    
                }else
                {
                    //Add
                    DataToAdd = ProdServ.AddProductOption(DataToAdd);
                    ViewData["Message"] = "New Option Added";
                }
    
                var RetModel = new ProductOptionModel() {ProductID = DataToAdd.ProductID};
                return View(RetModel);
            }
    

    所以在底部,我清空模型(只留下必需的字段),然后返回视图。但是,该视图保存以前提交的表单中的数据。

    有什么想法吗?我已经调试了代码并检查了retmodel变量是否为空。

    2 回复  |  直到 15 年前
        1
  •  5
  •   Robert Koritnik    15 年前

    当在HTTP文章上返回一个视图时,HTML帮助程序就是这样工作的。他们更喜欢发布数据而不是模型值。

    使用post/redirect/get

    所以我建议你使用 Post/Redirect/Get ASP.NET MVC中非常支持的模式。在POST成功完成之后,您的控制器操作应该重定向到一些GET操作,就像您的情况一样。

    public ActionResult Process()
    {
        return View(new Data { Id = -1 });
    }
    
    [HttpPost]
    public ActionResult Process(Data data)
    {
        if (!this.ModelState.IsValid)
        {
            return View(data);
        }
        new MyService().ProcessData(data);
        return RedirectToAction("Process");
    }
    

    如果显示所有以前输入的数据,则可以在“获取”操作中提供这些数据,或者使用 TempData 字典。

        2
  •  0
  •   Mattias Jakobsson    15 年前

    这是因为内置输入帮助程序将首先查看已发布的数据,并使用这些值(如果存在)。然后看看模型。