Asp.Net MVC - 空白模型不返回空白数据

时间:2010-06-02 12:48:35

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

我有一个表单,用户可以用他们想要的数据填写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 个答案:

答案 0 :(得分:5)

在HTTP POST上返回视图时,Html帮助程序以这种方式工作。他们更喜欢发布数据而非模型值。

使用发布/重定向/获取

这就是为什么我建议你使用Asp.net MVC非常支持的Post/Redirect/Get模式。在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");
}

如果您显示所有先前输入的数据,您可以在GET操作中提供这些数据,或使用TempData字典将其从POST转移到GET操作。

答案 1 :(得分:0)

这是因为输入助手的构建将首先查看已发布的数据并使用这些值(如果存在)。然后它会看模型。