我有一个表单,用户也可以用他们想要的数据填写 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);
}
所以在底部,我将模型清空(只留下必填字段),然后返回到 View 。然而,该 View 保留了之前提交的表单中的数据。
有什么想法吗?我调试了代码并检查了 RetModel 变量是否为空。
最佳答案
当在 HTTP POST 上返回 View 时,Html 助手以这种方式工作。他们更喜欢发布数据而不是模型值。
使用发布/重定向/获取
这就是为什么我建议您使用 Post/Redirect/Get在 Asp.net MVC 中得到很好支持的模式。在 POST 成功完成后,您的 Controller 操作应重定向到某些 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 操作。
关于c# - Asp.Net MVC - 空白模型不返回空白数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2957768/