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

Lia*_*amB 4 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);
        }
Run Code Online (Sandbox Code Playgroud)

所以在底部我将模型空白(只留下所需的字段),然后返回到视图.但是,该视图包含先前提交的表单中的数据.

有什么想法吗?我调试了代码并检查了RetModel变量是否为空.

Rob*_*nik 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");
}
Run Code Online (Sandbox Code Playgroud)

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